1 #include<iostream> 2 using namespace std; 3 int step[21]; 4 int flag[21]; 5 int a[42]; 6 int n; 7 bool check(int x,int y) 8 { 9 if(a[x+y]&&!flag[y]) 10 return true; 11 else 12 return false; 13 } 14 void dfs(int dp) 15 { 16 int i; 17 if(dp==n) 18 { 19 if(a[1+step[n-1]]) 20 { 21 printf("1"); 22 for(i=1;i<n;i++) 23 printf(" %d",step[i]); 24 printf("\n"); 25 } 26 return; 27 } 28 for(i=2;i<=n;i++) 29 { 30 if(check(step[dp-1],i)) 31 { 32 step[dp]=i; 33 flag[i]=1; 34 dfs(dp+1); 35 flag[i]=0; 36 } 37 } 38 } 39 int main() 40 { 41 int count=1; 42 memset(a,0,sizeof(a)); 43 a[2]=a[3]=a[5]=a[7]=a[11]=a[13]=a[17]=1; 44 a[19]=a[23]=a[29]=a[31]=a[37]=a[41]=1; 45 while(~scanf("%d",&n)) 46 { 47 printf("Case %d:\n",count++); 48 memset(flag,0,sizeof(flag)); 49 step[0]=1; 50 flag[1]=1; 51 dfs(1); 52 printf("\n"); 53 } 54 return 0; 55 }
这是我第一个深搜题,在经过大家的引导,终于开始了自己的深搜之路,很艰难啊!!