//题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=488
本题是由hdu1016改编而来的,不过改的东西不多。。
还是一样的,深度优先搜索(dfs).
相信大家既然已经看到了这个博客,对dfs都有了一定的了解。
这个题目要求填n个数字,每相邻的数字只和要求是素数,因为本题的要求是1000Ms,所以我们素数要用打表的方式。下面是代码。。。。。
*****************************************************************************************************************************************************
#include <stdio.h>
#include <math.h>
#include <string.h>
int n;
int cnt;
int a[40],v[40];
int flag;
int isP[] = {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,0};
void dfs(int s)
{
if(s > n)
{
if(isP[a[1] + a[n]])
{
flag = 1;
for(int i = 1;i < n;++i)
printf("%d ",a[i]);
printf("%d\n",a[n]);
return ;
}
return ;
}
for(int i = 2;i <= n;++i)
{
if(!v[i] && isP[i + a[s - 1]])
{
a[s] = i;
v[i] = 1;
dfs(s + 1);
v[i] = 0;
}
}
}
int main()
{
while(~scanf("%d",&n) && n)
{
flag = 0;
cnt++;
printf("Case %d:\n",cnt);
memset(v,0,sizeof(v));
a[1] = 1;
v[1] = 1;
if(n == 1){
printf("%d\n",a[1]);
continue;
}
else if(n % 2 == 1)
{
printf("No Answer\n");
continue;
}
dfs(2);
if(!flag)
printf("No Answer\n");
}
return 0;
}