hdu 1016 Prime Ring Problem(DFS)

来源:互联网 发布:比赛读书的软件 编辑:程序博客网 时间:2024/05/17 04:50

原题链接:

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



思路:

DFS……


代码如下:

#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int MAXN=100;const int N=20;int ans[N],n,num;bool vis[N];const int prime[]={2,3,5,7,11,13,17,19,23,29,31,37};//素数,因为只有1-19bool isPrime(int x){for(int i=0;i<12;i++)if(x==prime[i])return true;return false;}void DFS(int s){if(s==n&&isPrime(ans[s-1]+1))//边界  勿忘判断第一个数和最后一个数的和{for(int i=0;i<s-1;i++)printf("%d ",ans[i]);printf("%d\n",ans[s-1]);return;}for(int i=2;i<=n;i++){if(!vis[i]&&isPrime(ans[s-1]+i)){ans[s]=i;vis[i]=true;DFS(s+1);vis[i]=false;}}}int main(){int kase=1;while(scanf("%d",&n)!=EOF){memset(vis,0,sizeof(vis));ans[0]=1;vis[1]=true;printf("Case %d:\n",kase);kase++;DFS(1);printf("\n");}return 0;}


0 0