初级dfs。。。
#include<iostream>
using namespace std;
int m[20];
bool b[20];
int n;
int p[38]={0,1,1,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};
void put(int x,int s,int n);
int main()
{
int n,j;
for(j=1;cin>>n;j++)
{
int i;
for(i=2;i<n;i++)
m[i]=b[i]=0;
m[1]=b[1]=1;
cout<<"Case "<<j<<":\n";
put(1,1,n);
cout<<"\n";
}
return 0;
}
void put(int x,int s,int n) //already put x and the last one put is s
{
int i,j;
int sum=s;
if(x==n)
{
if(p[sum+1])
{
for(i=0;i<n;i++)
{
if(i)
cout<<" ";
cout<<m[i+1];
}
cout<<"\n";
}
}
else
{
for(i=2;i<=n;i++)
{
if(!b[i])
{
sum+=i;
if (p[sum])
{m[x+1]=i;b[i]=1;put(x+1,i,n);b[i]=0;}
sum-=i;
}
}
}
}