1294 全排列
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
题解
题目描述 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
#include <stdio.h>
#include <iostream>
int go[11];
int get[11];
void allSortOutput(int i, int j, int n, int go[], int get[]);
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
allSortOutput(i, 0, n, go, get);
for(int dk=0;dk<=n;dk++){//clear signal
go[dk]=0;
}
}
return 0;
}
//n max
void allSortOutput(int i, int j, int n, int go[], int get[]){
int m,k,q,p;
//printf("遍历到数字:%d 是第几个遍历的:%d \n",i,j);
/*
printf("prego:");
for(int qwe=0; qwe<n;qwe++){
printf("%d ",go[qwe]);
}
printf("\n");
printf("preget:");
for(int qwe=0; qwe<n;qwe++){
printf("%d ",get[qwe]);
}
printf("\n");
*/
if(go[i]==0){//此节点没有被遍历
get[j++]=i;
//if(j==0){
go[i]=1;
//}
for(m=1;m<=n;m++){
if(go[m]==0){// 不需要 m!= i
//go[m]=1;
allSortOutput(m, j, n, go, get);
//go[m]=0;
}
}
}
go[get[j-1]]=0;
if(j==n-1){//达到全遍历了
//printf("\n\ngogogogogogogo\n\n");
for(p=0;p<n;p++){
printf("%d ",get[p]);
}
//for(int dm=0;dm<=n;dm++){//output
// go[dm]=0;
//}
//go[get[0]]=1;
printf("\n");
}
}