hdu 1016Prime Ring Problem(dfs 回溯入門)
阿新 • • 發佈:2018-11-25
#include<iostream> #include<cstdio> #include<cstring> #include<cstring> #include<algorithm> using namespace std; int ans[200]; int prime[200]; int vis[200]; int n; void init() {memset(prime,0,sizeof(prime)); for(int i=2;i<200;i++) if(!prime[i]) for(int j=i*i;j<200;j+=i) prime[j]=1; } void print() { if(!prime[ans[0]+ans[n-1]]) { for(int i=0;i<n-1;i++) printf("%d ",ans[i]); printf("%d\n",ans[n-1]); } } void dfs(int pos) { if(pos==n) {print(); } else { for(int i=2;i<=n;i++) { if(!vis[i]&&!prime[ans[pos-1]+i]) { vis[i]=1; ans[pos]=i; dfs(pos+1); vis[i]=0; } } } } int main() {int w=0; while(~scanf("%d",&n)) {w++; printf("Case %d:\n",w); init(); memset(vis,0,sizeof(vis)); ans[0]=1; vis[0]=1; dfs(1); printf("\n"); } }