很简单的深搜 只要看出来是深搜...
注意判断最后一点是否与加一为质数
#include<stdio.h> #include<string.h> #include<algorithm> #include<map> #include<math.h> using namespace std; int n; int ans[30]; bool vis[30]; bool ok[105]; void init()///素数打表 { memset(ok,true,sizeof(ok)); for(int i=2;i<=100;i++) { for(int k=2;k*i<=100;k++) { ok[k*i]=false; } } return ; } bool check(int a,int b) { if(ok[a+b]==true) return true; else return false; } void dfs(int w,int a) { vis[a]=false; ans[w++]=a; if(w==n&&check(a,1)) { for(int i=0;i<w;i++) { printf("%d",ans[i]); if(i==w-1) printf("\n"); else printf(" "); } return ; } for(int i=1;i<=n;i++) { if(vis[i]==true) { if(check(i,a)) { dfs(w,i); vis[i]=true; } } } return ; } int main(){ int tt=0; init(); while(~scanf("%d",&n)) { tt++; printf("Case %d:\n",tt); memset(vis,true,sizeof(vis)); dfs(0,1); printf("\n"); } }
时间: 2024-10-14 05:49:41