您的位置:首页 > 其它

hdu 1016 Prime Ring Problem(回溯)

2014-01-26 19:44 423 查看
/*

题意:素数环,相邻的两个数的和为素数。

*/

#include<iostream>
using namespace std;
int ans[21], n;
bool a[40], b[21];

void work(int k)
{
int i;
if(k==n+1)
{
if(!a[ans[1]+ans
])
return;
bool pp=false;
for(i=1; i <= n; i++ )
{
if(pp)
printf(" ");
printf("%d", ans[i]);
pp=true;
}
printf("\n");
return ;
}
for(i=1; i <= n; i++ )
{
if(!b[i])
{
ans[k]=i;
if(ans[1]!=1)
return;
if(a[ans[k]+ans[k-1]]==false)
continue;
b[i]=true;
work(k+1);
b[i]=false;
}
}
}

int main()
{
memset(a, false, sizeof(a));
a[1]=a[2]=a[3]=a[5]=a[7]=a[11]=a[13]=a[17]=a[19]=a[23]=a[29]=a[31]=a[37]=true;
int p=1;
while(scanf("%d", &n) != EOF)
{
printf("Case %d:\n", p++);
memset(b, false, sizeof(b));
work(1);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: