/* Function Description: HDOJ 1016
Environment: DEV C++ 5.6.3.1
Technique: ALGORITHM OF DFS
Version: DFS
Author: valar morghulis
Date: 20150806
Notes: Take care of from output
*/
#include<cstdio>
#include<cmath>
int a[22];
int use[22];
int n;
int isprime(int num)//创建一个函数,判断是否为素数
{
int i;
for(i=2;i<=sqrt(num+0.0);i++)
{
if(num%i==0)
return 0;
}
return 1;//到此为止已经做好标记,素数被 1 标记,非素数标记为 0
}
void dfs(int num)
{
int i;
if(n==num&&isprime(a[0]+a[n-1]))//判断素数环的最后一个与第一个元素的和是否为素数
{
for(i=0;i<n;i++)
{
if(i==n-1)
printf("%d\n",a[i]);//需要注意输出格式问题‘空格 ’
else
printf("%d ",a[i]);
}
}
else
{
for(i=2;i<=n;i++)
{
if(!use[i]&&isprime(i+a[num-1]))
{
a[num]=i;
use[i]=1;
dfs(num+1);//继续深度搜索下一个树
use[i]=0;// 千万别忘记把
}
}
}
}
int main()
{
int cnt = 1;
while(~scanf("%d",&n))
{
int i;
for(i=0;i<n;i++)
use[i]=0;
a[0]=1;
printf("Case %d:\n",cnt++);
dfs(1);//从 1 开始深度搜索
puts("");//结尾记得换行~~
}
return 0;
}
解题报告
最新推荐文章于 2022-09-16 16:51:41 发布