问题 A: 【搜索】桐桐的全排列

问题 A: 【搜索】桐桐的全排列

时间限制: 1 Sec  内存限制: 64 MB
提交 状态

题目描述

今天,桐桐的老师布置了一道数学作业,要求列出所有从数字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 }

 


posted @ 2020-11-12 22:54  瑜瑜子  阅读(185)  评论(0)    收藏  举报