hdu 1016 Prime Ring Problem
http://acm.hdu.edu.cn/showproblem.php?pid=1016
题意:给你一个数n,让1~n数形成相邻两个数的和是个素数的环,并把环的序列输出
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }