全排列
Time Limit : 3000/1000ms (Java/Other) Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 12 Accepted Submission(s) : 6
Font: Times New Roman | Verdana | Georgia
Font Size: ← →
Problem Description
用深度优先搜索输出1到n(1<=n<=8)所有不重复的排列,即n的全排列。
Input
输入有多组数据,每组数据就一行为n。
Output
对于每组数据n输出其全排列,每组输出中间用一空行隔开。
Sample Input
3
Sample Output
123 132 213 231 312 321
Author
代码:
- #include <iostream>
- #include <stdio.h>
- #include <string.h>
- using namespace std;
- int visit[15],ans[15],t;
- void dfs(int x)
- {
- int i,j;
- for(i=1; i<=t; i++)
- {
- if(visit[i]==0)//判断当前点如果木有被访问过则深入
- {
- visit[i]=1;
- ans[x]=i; //将当前的这个数保存起来
- if(x<t) //如果全部完成 则不递归 进行输出
- dfs(x+1);//递归下一层
- else
- {
- for(j=1; j<=t; j++)
- cout<<ans[j];
- cout<<endl;
- }
- visit[i]=0;
- }
- }
- }
- int main ()
- {
- int flag=0;
- while(scanf("%d",&t)!=EOF)
- {
- memset(visit,0,sizeof(visit));
- if(flag==0) //特别奇葩的格式 每组输出中间用一空行隔开 第一组不用
- flag++;
- else
- cout<<endl;
- dfs(1);
- }
- return 0;
- }