0
点赞
收藏
分享

微信扫一扫

HDOJ  1016   Prime Ring Problem


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

题解:

素数环:由1到n个数构成一个环,其中环内任意2个相邻的数字之和是素数。
   

#include <iostream>
#include <cstring>
using namespace std;
const int MAXN = 41;
bool visit[MAXN];
int n,p[MAXN],circle[MAXN];
void prime(){
int i,j;
memset(p,true,sizeof(p));
for(i=2;i<MAXN;i++)
for(j=2;i*j<MAXN;j++)
p[i*j]=false;
}
void dfs(int c,int cnt){
if(cnt==n && p[circle[1]+circle[n]]){
for(int i=1;i<n;i++)
cout<<circle[i]<<' ';
cout<<circle[n]<<endl;
}
for(int i=1;i<MAXN;i++)
if(p[i+c] && i<=n && !visit[i]){
circle[cnt+1]=i;
visit[i]=true;
dfs(i,cnt+1);
visit[i]=false;
}
}
int main(){
int c=1;
prime();
while(cin>>n){
memset(visit,false,sizeof(visit));
cout<<"Case "<<c++<<":"<<endl;
visit[1]=true,circle[1]=1;
dfs(1,1);
cout<<endl;
}
return 0;
}

举报

相关推荐

0 条评论