问题 A: 【搜索】桐桐的全排列
题目描述
今天,桐桐的老师布置了一道数学作业,要求列出所有从数字1到数字n的连续自然数的排列,要求所产生的任一数字序列中不允许出现重复的数字。因为排列数很多,桐桐害怕写漏了,所以她决定用计算机编程来解决。
输入
只有一个整数n(1≤n≤9)。
输出
按字典序输出由1~n组成的所有不重复的数字序列,每行一个序列,每个数字之间有一个空格。
样例输入 Copy
3
样例输出 Copy
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
1 #include<bits/stdc++.h> 2 using namespace std; 3 bool b[100]={0}; 4 int n,ans[100]={1}; 5 int search(int t); 6 int print(); 7 int main() 8 { 9 scanf("%d",&n); 10 search(1); 11 12 } 13 int search(int t) 14 { 15 for(int i=1;i<=n;i++) 16 { 17 if(b[i]==0) 18 { 19 b[i]=1; 20 ans[t]=i; 21 if(t==n) print(); 22 else search(t+1); 23 b[i]=0; 24 } 25 } 26 } 27 int print() 28 { 29 for(int i=1;i<=n;i++) 30 printf("%d ",ans[i]); 31 printf("\n"); 32 }
1 #include<bits/stdc++.h> 2 using namespace std; 3 int n,a[10],b[10]; 4 void dfs(int x){ 5 for(int i=1;i<=n;i++){ 6 if(x==n+1) { 7 for(int i=1;i<=n;i++) 8 printf("%d ",a[i]); 9 printf("\n"); 10 return; 11 } 12 else { 13 if(b[i]==0){ 14 a[x]=i; 15 b[i]=1; 16 dfs(x+1); 17 b[i]=0; 18 } 19 20 } 21 } 22 } 23 int main(){ 24 memset(a,1,sizeof(int)); 25 memset(b,0,sizeof(int)); 26 scanf("%d",&n); 27 dfs(1); 28 return 0; 29 }

浙公网安备 33010602011771号