2 2 3
12 21 123 132 213 231 312 321
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 using namespace std; 5 int s[12]={1,2,3,4,5,6,7,8,9}; 6 int main() 7 { 8 int T; 9 scanf("%d",&T); 10 while(T--) 11 { 12 int i,n; 13 scanf("%d",&n); 14 do 15 { 16 for(i=0;i<n;i++) 17 printf("%d",s[i]); 18 printf("\n"); 19 }while(next_permutation(s,s+n)); 20 } 21 return 0; 22 }
1 #include <stdio.h> 2 #include <string.h> 3 int res[12]; //存放结果 4 int vis[12]; //标记是否被用过 5 int n; 6 void output() 7 { 8 int i; 9 for(i=1;i<=n;i++) 10 printf("%d",res[i]); 11 printf("\n"); 12 } 13 void dfs(int step) 14 { 15 int i; 16 if(step>n) //满足深度时输出 17 output(); 18 else 19 { 20 for(i=1;i<=n;i++) 21 if(!vis[i]) //如果i没有被用过 22 { 23 vis[i]=1; //用过后标记为用过 24 res[step]=i; //存入数组,待会儿输出 25 dfs(step+1); //继续找下一位数 26 vis[i]=0;//函数返回后就以为着回到上一次的for循环,那么这次的i定将被释放(不用),那么标记为没用过 27 } 28 } 29 } 30 int main() 31 { 32 int T; 33 scanf("%d",&T); 34 while(T--) 35 { 36 memset(vis,0,sizeof(vis)); 37 scanf("%d",&n); 38 dfs(1); 39 } 40 return 0; 41 }
nyoj_366_D的小L_201403011600,布布扣,bubuko.com
原文:http://www.cnblogs.com/xl1027515989/p/3575214.html