http://acm.hdu.edu.cn/showproblem.php?pid=1016
经典问题,素数环。
直接回溯即可。
View Code
#include <stdio.h> #include <string.h> int n; int a[30]; int prime[100],vis[30]; void dfs(int cur) { if(cur==n && prime[a[0]+a[n-1]]==0) { printf("%d",a[0]); for(int i=1;i<n;i++) printf(" %d",a[i]); putchar('\n'); } else for(int i=2;i<=n;i++) if(!vis[i] && prime[i+a[cur-1]]==0) { a[cur]=i; vis[i]=1; dfs(cur+1); vis[i]=0; } } int main() { int nCase=1; for(int i=2;i*i<101;i++) if(!prime[i]) for(int j=i;j*i<101;j++) prime[j*i]=1; while(~scanf("%d",&n)) { printf("Case %d:\n",nCase++); a[0]=1; memset(vis,0,sizeof(vis)); dfs(1); putchar('\n'); } return 0; }