
6 8
Case 1: 1 4 3 2 5 6 1 6 5 2 3 4 Case 2: 1 2 3 8 5 6 7 4 1 2 5 8 3 4 7 6 1 4 7 6 5 8 3 2 1 6 7 4 3 8 5 2
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int n,vis[40],ans[40],prime[100];
void init_prime()
{
int i,j;
for(i=2;i<100;i++) {
if(!prime[i]){
for(j=2*i;j<=100;j+=i) prime[j]=1;
}
}
}
void dfs(int num,int cnt)
{
int i;
if(cnt==n) {
for(i=0;i<n;i++) {
if(i==0) printf("%d",ans[i]);
else printf(" %d",ans[i]);
}
printf("\n");
}
for(i=2;i<=n;i++) {
if(vis[i]==1) continue;
if(prime[i+num]==0) {
if(cnt==n-1 && prime[i+1]) continue;
vis[i]=1;
ans[cnt]=i;
dfs(i,cnt+1);
vis[i]=0;
}
}
}
int main()
{
int number,i,j;
number=0;
init_prime();
while(scanf("%d",&n)!=EOF){
printf("Case %d:\n",++number);
memset(vis,0,sizeof(vis));
ans[0]=1;
vis[1]=1;
dfs(1,1);
printf("\n");
}
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
HDU Prime Ring Problem (DFS+素数打表)
原文:http://blog.csdn.net/h1021456873/article/details/47661407