您的位置:首页 > 其它

UVA 524 - Prime Ring Problem

2013-03-24 12:21 337 查看
先初始化个到31的质数表

再回溯

#include <iostream>
#include <memory.h>
#include <cstdio>
#include <vector>
using namespace std;
#define MAX 17
bool isP[]={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};
bool used[MAX];
int n;
vector<int>stak;
void backtracking(int curi){
if(curi==n){
for (int i=0;i<stak.size();++i)
{
if(i>0)printf(" ");
printf("%d",stak[i]);
}
printf("\n");
return ;
}
if(curi+1==n){
for (int i=2;i<=n;++i)
{
if(isP[stak[curi-1]+i]&&isP[stak[0]+i]&&!used[i]){
used[i]=1;
stak.push_back(i);
backtracking(curi+1);
stak.pop_back();
used[i]=0;
}
}
}else{
for (int i=2;i<=n;++i)
{
if(isP[stak[curi-1]+i]&&!used[i]){
used[i]=1;
stak.push_back(i);
backtracking(curi+1);
stak.pop_back();
used[i]=0;
}
}
}

}
int main(){
int cas=1;
scanf("%d",&n);
while (1)
{
printf("Case %d:\n",cas++);
used[1]=1;
stak.push_back(1);
backtracking(1);
stak.pop_back();
used[1]=0;
if(scanf("%d",&n)==1)printf("\n");
else break;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: