首页 > 代码库 > hdu 1016 Prime Ring Problem

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