大意:从1到n的n个数组成一个环,任意两个相邻的数之和为素数,环从1开始
#include<iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
int n;
int prime[50]={2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53};
int a[21], b[21], flag;
void dfs(int x, int i)
{
if(i==n)
{
int k=0;
for(;k<16;k++)
if((x+1)==prime[k])
break;
if(k!=16)
{
for(int j=0;j<n;j++)
if(j!=n-1) printf("%d ",b[j]);
else printf("%d\n",b[j]);
}
return;
}
for(int j=1;j<=n;j++)
{
if(!a[j])
{
for(int k=0;k<16;k++)
if((x+j)==prime[k])
{
a[j]=1;
b[i]=j;
dfs(j,i+1);
a[j]=0;
}
}
}
}
int main()
{
int t=1, k=1;
while(scanf("%d",&n)!=EOF&&n)
{
memset(a,0,sizeof(a));
printf("Case %d:\n",t++);
b[0]=1;a[1]=1;
dfs(1,1);
a[1]=0;
printf("\n");
}
return 0;
}