方法:很明显的dfs即可 至于路径dfs的过程中保存即可 找到就输出
#include <iostream> #include "stdio.h" #include "stdlib.h" #include "string.h" #include "algorithm" #include <queue> #define N 1800000 using namespace std; int n; int prime[100]; int vis[25]; int ans[25]; void creatlist() { for(int i=2;i<=50;i++) if(!prime[i]) for(int k=i<<1;k<=50;k+=i) prime[k]=1; } void dfs(int x,int cnt) { vis[x]=1; ans[cnt]=x; if(cnt==n) if(!prime[x+1]) { for(int i=1;i<n;i++) printf("%d ",ans[i]); printf("%d\n",ans[n]); return ; } for(int i=2;i<=n;i++) { if(!vis[i]&&!prime[x+i]) { dfs(i,cnt+1); vis[i]=0; } } } int main() { int cct=1; creatlist(); while(scanf("%d",&n)!=EOF) { memset(vis,0,sizeof vis); printf("Case %d:\n",cct++); dfs(1,1); printf("\n"); } }