HDU-1016 Prime Ring Problem
题意:给定一个数,输出素数环。
思路:dfs。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <cstdio> 2 #include <cstring> 3 #include <cmath> 4 #include <string> 5 #include <algorithm> 6 #include <iostream> 7 using namespace std; 8 const int N=110; 9 10 bool prime[N],flag[N]; 11 int vis[N]; 12 int n; 13 14 void dfs(int p,int cnt){ 15 if(cnt==n){ 16 if(!prime[vis[n]+1]) 17 for(int i=1;i<=n;i++) 18 printf(i==n?"%d\n":"%d ",vis[i]); 19 return ; 20 } 21 for(int i=2;i<=n;i++){ 22 if(!flag[i]&&!prime[p+i]){ 23 vis[cnt+1]=i; 24 flag[i]=true; 25 dfs(i,cnt+1); 26 flag[i]=false; 27 } 28 } 29 } 30 31 int main(){ 32 33 // freopen("data.in","r",stdin); 34 // freopen("data.out","w",stdout); 35 36 memset(prime,false,sizeof(prime)); 37 for(int i=2;i<=N;i++){ 38 if(prime[i]) continue; 39 for(int j=2;j*i<=N;j++) 40 prime[j*i]=true; 41 } 42 int iCase=1; 43 while(scanf("%d",&n)!=EOF){ 44 printf("Case %d:\n",iCase++); 45 memset(vis,0,sizeof(vis)); 46 vis[1]=1; 47 memset(flag,false,sizeof(flag)); 48 dfs(1,1); 49 puts(""); 50 } 51 return 0; 52 }