您的位置:首页 > 其它

hdoj 1016经典问题素数环

2012-12-25 01:15 239 查看
//经典搜索题
#include <iostream>
#include <cstring>
using namespace std;

int primelist[38] = {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};
//素数表,
int n;
int A[21];
//存放序列结果
int vis[21];
//访问标记

void DFS(int cur)
{
if(cur == n && primelist[A[n-1]+A[0]])    //结束条件
{
cout<<A[0];
for(int i = 1; i < n; ++i)
{
cout<<" "<<A[i];
}
cout<<endl;
}
else
{
for(int i = 2; i <= n;++i)
{
if(!vis[i] && primelist[i + A[cur-1]])   //如果i没有用过并且能与前面的数和成素数
{
A[cur] = i;    //标记i已访问
vis[i] = 1;    //将i加入结果序列
DFS(cur+1);    //递归访问
vis[i] = 0;    //回溯法标准框架去掉标记
}
}
}
}

int main()
{
int count = 0;
A[0] = 1;
while(cin>>n)
{
memset(vis,0,sizeof(vis));
count++;
cout<<"Case "<<count<<":"<<endl;
DFS(1);
cout<<endl;
}
return 0;
}


刘汝佳白书上的题目,回溯法标准框架
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: