杭电 1016题
//经典的深度优先搜索
#include <iostream>
using namespace std;
#define arraysize 21
int data[arraysize]; //存储结果
bool final[arraysize]; //标记该节点是否已经被搜索
//素数表,用于存储是否是素数,从0开始,1代表是素数
int primelist[38] = {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};
int n;
int casenum;
void DFS(int num) //代表已经找到了num个数
{
int i,j;
if(num==n && primelist[data[n]+data[1]]) //注意判断最后一个数和第一个数是否仍为素数
{
for(i=1;i<n;++i)
cout<<data[i]<<" "; //此处注意输出格式,最后一个数不要添加空格
cout<<data[n]<<endl;
return;
}
else
{
for(i=2;i<=n;++i)
{
if(!final[i] && primelist[data[num]+i])
{
data[num+1] = i;
final[i] = true;
DFS(num+1); //深度优先搜索
final[i] = false; //此处别忘了进行恢复
}
}
}
}
int main()
{
//freopen("1.txt","r",stdin);
while(cin>>n)
{
memset(final,0,sizeof(final));
data[1] = 1;
final[1] = true;
cout<<"Case "<<++casenum<<":"<<endl;
DFS(1);
cout<<endl;
}
return 0;
}