标签:
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 41154 Accepted Submission(s): 18221
#include<iostream> #include<stdio.h> using namespace std; int n; int num[25]; bool vis[25]; int prime[30]; void dfs(int a) { if(a>n+1) return; if(num[1]!=1) return; if(a==n+1) { for(int i=1; i<n+1; i++) { if(!prime[num[i%n]+num[(i+1)%n]]) return; } //if(num[1]==1) // { for(int i=1; i<n; i++) printf("%d ",num[i%n]); printf("%d",num[0]); printf("\n"); // } return; } for(int i=1; i<=n; i++) { if(!vis[i]) { num[a%n]=i; if(a>1) { if (!prime[num[a%n]+num[(a-1)%n]]) continue; } //cout<<num[a%n]<<" "<<endl; vis[i]=true; dfs(a+1); vis[i]=false; } } } int main() { for(int i=0; i<100; i++) prime[i]=true; for(int i=2; i<50; i++) for(int j=i<<1; j<100; j+=i) { if(prime[j]) prime[j]=false; } int t=1; while((scanf("%d",&n))!=EOF) { for(int i=0; i<25; i++) { num[i]=0; vis[i]=false; } num[1]=1; printf("Case %d:\n",t++); dfs(1); printf("\n"); } return 0; }
直接暴力搜索9
标签:
原文地址:http://www.cnblogs.com/superxuezhazha/p/5537932.html