题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1016
入门级深搜问题,套用模板即可。
代码如下:
#include<iostream> #include<cmath> #include<cstdio> #include<cstring> using namespace std; int n; int a[21]; int vis[21]; int check(int x)//检查两数之和是否为质数 { int i,k; if(x==2)return 1; if(x<2||x%2==0)return 0; k=sqrt(x); for(i=3;i<=k&&x%i;i+=2); if(i>k)return 1; else return 0; } void dfs(int cur)//深搜 { int i; if(cur==n&&check(a[0]+a[n-1])) { for(int i=0;i<n;i++) { if(i>0)cout<<" "; cout<<a[i]; } cout<<endl; } for(i=2;i<=n;i++) { a[cur]=i; if(!vis[i]&&check(a[cur]+a[cur-1])) { vis[i]=1; dfs(cur+1); vis[i]=0; } } } int main() { int flag=0; while(cin>>n) { a[0]=1;//输出结果是每次以1为开头,顺时针方向 memset(vis,0,sizeof(vis)); printf("Case %d:\n",++flag); dfs(1); cout<<endl; } return 0; }
HDU-1016-Prime Ring Problem,布布扣,bubuko.com
原文:http://blog.csdn.net/pwaiyuan/article/details/23781859