//题目链接: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; }