您的位置:首页 > 其它

HDU 1016 Prime Ring Problem(DFS)

2015-08-28 22:27 507 查看
准备考研的期间做到了PAT上的搜索题,发现以前自己在写HDUOJ的时候貌似都把搜索题选择性的跳过了,所以这一题基本可以说是我写的第一道有关图论的题,在做PAT的时候发现了自己在数据结构操作的不足,接下来的日子里应该会加强对于链表树图的操作,又要开始写HDUOJ的日子了。这一题大致参考了网上别人AC的代码。

#include<iostream>
#include<stdio.h>
using namespace std;

int n,visit[21],a[21];
bool isPrime(int x){
if(x == 1 || x== 2 || x == 3)
return true;
for(int i = 2;i*i<=x;i++){
if(x % i == 0)
return false;
}
return true;
}

void dfs(int m){
if(m == n && isPrime(a[m-1]+a[0])){
for(int i = 0;i<m-1;i++)
printf("%d ",a[i]);
printf("%d\n",a[m-1]);
}
else{
for(int i = 2;i<=n;i++){
if(visit[i] == 0){
if(isPrime(a[m-1]+i)){
visit[i] = 1;
a[m++] = i;
dfs(m);
m--;
visit[i] = 0;
}
}
}
}
}

int main(){
int num = 0;
while(~scanf("%d",&n)){
num++;
printf("Case %d:\n",num);
memset(visit,0,sizeof(int)*n);
a[0] = 1;
dfs(1);
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: