原来用C++ STL:next_permutation做的,每生成一个序列判断一个,结果超时,不过还是写下来吧,上一篇深搜的代码AC了
# include <iostream>
# include <algorithm>
using namespace std;
bool sushu[]={0,
0,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,0,1,0
};
int a[21];
int main()
{
int n, i, N, flag;
N=1;
while (cin>>n&&n)
{
flag = 1;
cout<<"Case "<<N++<<":"<<endl;
for (i = 0; i<n; i++)
a[i] = i+1;
a[n]=1;
do
{
if ((n-1)&1||n==1)
break;
if (a[n-1]%2==1||a[1]%2==1)
continue;
for (i = 0; i<n; i++)
{
if (!sushu[a[i]+a[i+1]])
break;
}
if (i==n)
{
flag = 0;
cout<<"1";
for (i = 1; i<n; i++)
cout<<" "<<a[i];
cout<<endl;
}
}while (next_permutation(a+1, a+n));
if (flag)
cout<<"No Answer"<<endl;
}
return 0;
}