标签:
Prime Ring Problem1 6 7 4 3 8 5 2
//这题的主要思路:直接利用dfs搜索满足头为1 两点之间的和为素数
#include <stdio.h> int a[21],n,cnt; int vis[21]; int cnt1=0; int k[21]; int prime(int n) //判断素数 { if(n==1) return 0; for(int i=2;i*i<=n;i++) { if(n%i==0) return 0; } return 1; } void dfs(int ini) { if(cnt1==n&&prime(k[n-1]+1)&&k[0]==1) //头为1 头尾相加为素数 长度为n { printf("%d",k[0]); for(int i=1;i<n;i++) printf(" %d",k[i]); printf("\n"); } else { for(int i=0;i<n;i++) { if(!vis[i]&&prime(a[i]+a[ini])) { vis[i]=1; k[cnt1++]=a[i]; dfs(i); cnt1--; //回溯 vis[i]=0; } } } } int main() { cnt=1; while(~scanf("%d",&n)) { for(int i=0;i<n;i++) { a[i]=i+1; vis[i]=0; } printf("Case %d:\n",cnt++); dfs(0); printf("\n"); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/a73265/article/details/46835249