全排列问题
输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
/* 解题思路:
假设数字是牌,排序相当于将牌放进盒子里面,以此解题
*/
#include<stdio.h>
int a[10],book[10]={0};//a代表盒子,book代表手上的牌
int n;//n代表1~n
void dfs(int step){
int i;
if(step==n){
for(i=0;i<n;i++){
printf(" %d",a[i]);
}
printf("\n");
return;
}
for(i=0;i<n;i++){
if(book[i]==0){
a[step]=i+1;//将手上的牌放进盒子中去
book[i]=1;//表示牌已经不在手上
dfs(step+1);//递归
book[i]=0;//如果返回,就将牌从盒子里面抽出
}
}
}
int main(){
scanf("%d",&n);
dfs(0);
return 0;
}