#include<stdio.h> #include<iostream> #include<string.h> #include<queue> #include<stack> #include<list> #include<stdlib.h> #include<algorithm> #include<vector> #include<map> #include<set> using namespace std; int n; int prime[100]; void Prime() { for(int i=2;i<=100;i++) for(int j=2;j<=100&&i*j<=100;j++) if(!prime[i]) prime[i*j]=1; prime[0]=1;prime[1]=1; } int vis[100]; int a[100]; void dfs(int x) { if(x==n-1){ for(int i=1;i<=n;i++){ if(!vis[i]&&!prime[1+i]&&!prime[a[x-1]+i]){ a[x]=i; printf("%d",1); for(int j=1;j<n;j++) printf(" %d",a[j]); printf("\n"); } } return ; } for(int i=1;i<=n;i++){ if(!vis[i]&&!prime[a[x-1]+i]){ a[x]=i; vis[i]=1; dfs(x+1); vis[i]=0; } } } int main() { int t=0; Prime(); while(~scanf("%d",&n)){ printf("Case %d:\n",++t); memset(vis,0,sizeof(vis)); a[0]=1;vis[1]=1; dfs(1); printf("\n"); } return 0; }
hdu1016Prime Ring Problem深搜,布布扣,bubuko.com
原文地址:http://www.cnblogs.com/yigexigua/p/3845196.html