标签:
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5817 Accepted Submission(s): 2229
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 int a[5],visit[100000],w,x=0,b[5]; 7 void DFS(int s,int n,int k) //s记录这个四位数的值,n记录当前已经到了第几个数字,k记录是否第一次进入函数 8 { 9 if(n>4) //四个数字全部排好位置 10 { 11 if(!visit[s]) //判断这个数字是否出现过 12 { 13 visit[s]=1; //标记这个数字已出现 14 if(w) //如果不是第一次输出,先输出空格 15 printf(" "); 16 w=1; 17 printf("%d",s); 18 x=1; //标记已经出现过数字 19 } 20 return; 21 } 22 for(int i=1; i<=4; i++) 23 { 24 if(k) //如果第一次进来 25 { 26 w=0; //标记还未输出过数字 27 if(!a[i]) continue; //如果这个数字为0,则跳过循环下一个 28 } 29 if(!b[i]) //判断这个数是否已经用过 30 { 31 b[i]=1; //已使用这个数字 32 DFS(s*10+a[i],n+1,0); //循环到下一层 33 b[i]=0; //返回上一层时,再次标记为未使用的数字 34 if(k&&x) //如果第一次进来,而且已经有输出数字了 35 { 36 cout<<endl; //输出一共空行 37 x=0; 38 } 39 } 40 } 41 } 42 int main() 43 { 44 int i,j,k=0,t; 45 while(~scanf("%d%d%d%d",&a[1],&a[2],&a[3],&a[4])) //输入四个数字 46 { 47 if(a[1]==0&&a[2]==0&&a[3]==0&&a[4]==0) 48 break; 49 if(k) printf("\n"); //加在这里的原因:最后一组数据后面没有空行 50 k=1; 51 sort(a+1,a+5); //四个数字从小到大排序 52 memset(visit,0,sizeof(visit)); 53 memset(b,0,sizeof(b)); 54 DFS(0,1,1); //初始化数据 55 } 56 return 0; 57 }
标签:
原文地址:http://www.cnblogs.com/pshw/p/4760092.html