题目描述 Description
给出一个n, 请输出n的所有全排列
输入描述 Input Description
读入仅一个整数n (1<=n<=10)
输出描述 Output Description
一共n!行,每行n个用空格隔开的数,表示n的一个全排列。并且按全排列的字典序输出。
样例输入 Sample Input
3
样例输出 Sample Output
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
数据范围及提示 Data Size & Hint
/**
Time: 2016/9/22
Note:
全排列,啊哈算法里讲搜索的那一章第一个例题
**/
#include<bits/stdc++.h>
using namespace std;
int n;
int a[11]; //存放排列的情况
bool vis[11]; //记录数字是否使用过
void DFS(int step){
if(step==n+1){ //如果搜到一个排列 输出然后返回到上一次调用DFS的地方
for(int i=1;i<=n;i++)
printf("%d ",a[i]);
printf("\n");
return ;
}
for(int i=1;i<=n;i++){
if(!vis[i]){ //如果这个数字没有用过,那就将这个数字加入,标记一下然后继续搜,
a[step]=i;
vis[i]=true;
DFS(step+1);
vis[i]=false; //“回收”刚刚使用的数字
}
}
}
int main(){
while(scanf("%d",&n)!=EOF){
memset(vis,false,sizeof(vis));
DFS(1);
}
return 0;
}