您的位置:首页 > 其它

ACM HDU 1016 Prime Ring Problem

2015-05-19 17:07 204 查看
/*一个简单的搜素题目,具体细节看代码*/

#include<iostream>

#include<stdio.h>

#include<stdlib.h>

#include<math.h>

#include<algorithm>

#include<string.h>

using namespace std;

#define MAX 23

bool status[MAX];//用于表示每个数字是否被选

int ans[MAX];//用于存储可行解

int n,cnt,Case=1;//cnt用于表示已经加入到环里的个数

bool IsPrime(int sum)

{

for(int i=2;i<=sqrt(sum)+1;i++)

if(sum%i==0)

return false;

return true;

}

void dfs(int i)//i表示当前节点的数字

{

if(cnt==n)

{

cout<<1<<" ";

for(int j=0;j<n-2;j++)

cout<<ans[j]<<" ";

cout<<ans[n-2]<<endl;

/* cout<<1<<" ";

for(int j=n-2;j>=0;j--)

cout<<ans[j]<<" ";

cout<<endl;*/

return ;

}

for(int j=2;j<=n;j++)

{

if(status[j])

continue;

if(IsPrime(i+j))

{

if(cnt==n-1&&!IsPrime(1+j))

continue;

status[j]=true;

ans[cnt-1]=j;

cnt++;

dfs(j);

status[j]=false;

cnt--;

}

}

}

int main()

{

while(cin>>n)

{

cnt=1;

memset(status,false,sizeof(status));

cout<<"Case "<<Case++<<":"<<endl;

dfs(1);

cout<<endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: