全排列
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;
}