标准DFS模板:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int isPrime[40]={0,0,1,1,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0,1,0,0,0,0,0,1,0,1,0,0,0,0,0,1,0,1}; int vis[21]; int A[21]; void dfs(int index,int n) { if(index==n&&isPrime[A[index-1]+A[0]]) { printf("%d",A[0]); for(int i=1;i<n;i++) printf(" %d",A[i]); printf("\n"); return ; } for(int i=2;i<=n;i++) { if(!vis[i]&&isPrime[i+A[index-1]]) { vis[i]=1; A[index]=i; dfs(index+1,n); vis[i]=0; } } } int main() { int n; int T=0; while(scanf("%d",&n)!=EOF) { printf("Case %d:\n",++T); if(n%2==1) continue; memset(A,0,sizeof(A)); A[0]=1; dfs(1,n); printf("\n"); } return 0; }
原文:http://www.cnblogs.com/program-ccc/p/4680787.html