因为是很简单很简单的DFS。。。我就直接贴代码了
#include<iostream>
using namespace std;
#include<stdio.h>
int n;
int pri[44]={0},vis[22]={0},num[22]={0};
void dfs(int root,int x)
{
int i;
if(x==n)
{
for(i=0;i<n-1;i++)
printf("%d ",num[i]);
printf("%d\n",num[i]);
}
else if(x==n-1)
{
for(i=2;i<=n;i++)
{
if(vis[i]==0&&pri[root+i]==1&&pri[i+1]==1)
{
num[x]=i;
vis[i]=1;
dfs(i,x+1);
vis[i]=0;
}
}
}
else
{
for(i=2;i<=n;i++)
{
if(pri[root+i]==1&&vis[i]==0)
{
num[x]=i;
vis[i]=1;
dfs(i,x+1);
vis[i]=0;
}
}
}
}
int main()
{
int i,j,T=0;
pri[2]=pri[3]=pri[5]=pri[7]=pri[11]=pri[13]=pri[17]=pri[19]=pri[23]=pri[29]=pri[31]=pri[37]=1;
num[0]=1;
while(cin>>n)
{
T++;
memset(vis,0,sizeof(vis));
vis[0]=vis[1]=1;
printf("Case %d:\n",T);
dfs(1,1);
printf("\n");
}
return 0;
}