hdu 1016 Prime Ring Problem

http://acm.hdu.edu.cn/showproblem.php?pid=1016

题意:给你一个数n,让1~n数形成相邻两个数的和是个素数的环,并把环的序列输出

 1 #include <cstdio>
 2 #include <cstring>
 3 #include <algorithm>
 4 #define maxn 100
 5 using namespace std;
 6 bool vis[100];
 7 int f[20];
 8 bool visi[30];
 9 int n;
10 
11 void inti()
12 {
13     memset(vis,false,sizeof(vis));
14     for(int i=2; i<=maxn; i++)
15     {
16         if(!vis[i])
17         {
18             for(int j=i*i; j<=maxn; j+=i)
19             {
20                 vis[j]=true;
21             }
22         }
23     }
24 }
25 
26 void dfs(int num,int cnt)
27 {
28     if(cnt==n)
29     {
30         if(vis[f[n]+1]) return ;
31         bool flag=false;
32         for(int i=1; i<=n; i++)
33         {
34             if(!flag) printf("%d",f[i]);
35             else printf(" %d",f[i]);
36             flag=true;
37         }
38         printf("\n");
39         return ;
40     }
41     for(int i=1; i<=n; i++)
42     {
43         if(!visi[i]&&!vis[num+i])
44         {
45             f[++cnt]=i;
46             visi[i]=true;
47             dfs(i,cnt);
48             cnt--;
49             visi[i]=false;
50         }
51     }
52 }
53 
54 int main()
55 {
56     inti();
57     int cas=1;
58     while(scanf("%d",&n)!=EOF)
59     {
60         memset(visi,false,sizeof(visi));
61         f[1]=1;
62         visi[1]=true;
63         printf("Case %d:\n",cas++);
64         dfs(1,1);
65         printf("\n");
66     }
67     return 0;
68 }
View Code

 

posted @ 2014-07-30 18:09  null1019  阅读(160)  评论(0编辑  收藏  举报