不是很喜欢这段代码,服务器开心的时候156ms,有时间回来改改
#include<cstdio>
int n;
int prime[]={2,3,5,7,11,13,17,19,23,29,31,37};
int isprime[40];
int circle[20];
int vis[20];
void primenum(){
int i;
for(i=0;i<12;i++) isprime[prime[i]]=1;
}
void dfs(int cur){
int i;
if(cur==n){
printf("%d",circle[1]);
for(i=2;i<=n;i++) printf(" %d",circle[i]);
printf("\n");
return;
}
for(i=2;i<=n;i++) if(!vis[i]&&isprime[circle[cur]+i])
if((cur==n-1&&isprime[i+1])||cur!=n-1){
circle[cur+1]=i;
vis[i]=1;
dfs(cur+1);
vis[i]=0;
}
}
int main(){
int index=1;
circle[1]=1;
vis[1]=1;
primenum();
while(scanf("%d",&n)!=EOF){
printf("Case %d:\n",index++);
dfs(1);
printf("\n");
}
}