hdu1016 Prime Ring Problem
http://acm.hdu.edu.cn/showproblem.php?pid=1016
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n;
int flag[20];
int a[45],num[20];
void dfs(int x,int y)
{
int i;
num[x]=y;
flag[y]=1;
if(x==n)
{
if(a[num[x]+num[1]]==0)
{
printf("1");
for(i=2;i<=n;i++)
printf(" %d",num[i]);
printf("\n");
}
return;
}
for(i=1;i<=n;i++)
{
if(!flag[i]&&!a[num[x]+i])
{
dfs(x+1,i);
flag[i]=0;//注意回溯
}
}
}
int main()
{
int i,j,k;
k=0;
memset(a,0,sizeof(a));
a[1]=1;a[0]=1;
for(i=2;i<=40;i++)
{
if(a[i]==0)
{
for(j=i+i;j<=40;j+=i)
a[j]=1;
}
}
while(scanf("%d",&n)!=-1)
{
k++;
printf("Case %d:\n",k);
memset(flag,0,sizeof(flag));
dfs(1,1);
printf("\n");
}
return 0;
}

浙公网安备 33010602011771号