素数环
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。
为了简便起见,我们规定每个素数环都从1开始。例如,下图就是6的一个素数环。
</pre><p><pre name="code" class="objc">#include<string.h>
#include<stdio.h>
int n;
int vis[22];
int map[22];
int prime[41]={0,0,0,1,0,1,0,1,0,0,0,
1,0,1,0,0,0,1,0,1,0,
0,0,1,0,0,0,0,0,1,0,
1,0,0,0,0,0,1,0,0,0
} ;
void dfs(int pos)
{
int i;
if(pos==n) //找到终点了
{
if(prime[map[pos-1]+1])
{
for(i=0;i<n;i++)
printf("%d ",map[i]);
printf("\n");
}
}
for(i=1;i<=n;i++)
{
if(vis[i]||!prime[map[pos-1]+i]) continue;
if(prime[map[pos-1]+i])
{
vis[i]=true;
map[pos]=i;
dfs(pos+1);
vis[i]=false;
}
}
}
int main()
{
int k;
k=0;
while(scanf("%d",&n),n)
{
printf("Case %d:\n",++k);
memset(vis,false,sizeof(vis));
if(n==1)
{
printf("1\n");
continue;
}
if(n&1)
{
printf("No Answer\n");
continue;
}
vis[1]=true;
map[0]=1;
dfs(1);
}
return 0;
}