Prime Ring Problem 素数环

 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 }

这是我第一个深搜题,在经过大家的引导,终于开始了自己的深搜之路,很艰难啊!!

posted @ 2012-06-23 23:18  欧阳生朵  阅读(147)  评论(0编辑  收藏  举报