您的位置:首页 > 其它

HDU 1016 Prime Ring Problem(回溯/深搜)

2016-03-23 18:20 316 查看
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1016

代码:

#include<stdio.h>
#include<string.h>

using namespace std;

int pri[14]={2,3,5,7,11,13,17,19,23,29,31,37,41};
int t;
int ans[21];
int book[21];

int judge(int x)
{
for(int i=0;i<=12;i++)
{
if(pri[i]==x)
return 1;
}
return 0;
}
void dfs(int num)
{
if(num == t) {
if(judge(ans[0]+ans[t-1])) {
printf("%d",ans[0]);
for(int i = 1; i < t;i++) {
printf(" %d",ans[i]);
}
printf("\n");
}
return;
}
else
{
for(int i=2;i<=t;i++)
{
if(judge(i+ans[num-1])&&book[i]==0)
{
ans[num]=i;
book[i]=1;
dfs(num+1);
book[i]=0;
}
}
}
return ;
}

int main()
{
int temp=0;
while(~scanf("%d",&t))
{
memset(ans, 0, sizeof(ans));
//if(temp++)
//printf("\n");
printf("Case %d:\n",++temp);
ans[0]=1;
//book[1]=1;
dfs(1);
printf("\n");
}
}


UVA是数据有毒,还是拿杭电提交吧。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: