hdu1016 深搜回溯
阿新 • • 發佈:2019-01-09
水題 上程式碼
#include<stdio.h> int n; int s[21]; int vis[21]; int isprime(int n) { int count=0; for(int i=2;i<=n-1;i++) if(n%i!=0) count++; if(count==n-2) return 1; return 0; } void dfs(int j) { if(j==n&&isprime(s[n-1]+1)) { for(int i=0;i<n;i++) { if(i==0) printf("1"); else printf(" %d",s[i]);} printf("\n"); } for(int i=2;i<=n;i++) { if(isprime(s[j-1]+i)&&vis[i]==0) { s[j]=i; vis[i]=1; dfs(j+1); vis[i]=0;//回溯框架; } } } int main() { int count=0; while(scanf("%d",&n)!=EOF) { printf("Case %d:\n",++count); s[0]=1; dfs(1); printf("\n"); } return 0; }