标签:dfs
刚开始接触搜索,先来一道基本题目练练手。
/*Author:Hacker_vision*/
#include<bits/stdc++.h>
#define clr(k,v) memset(k,v,sizeof(k))
using namespace std;
const int _max=1e3+10;//素数打表
int n,pri[]={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,0,0,0};
bool vis[_max];
int v[_max];//存储序列
void dfs(int deep){ //对树的深度
if(deep==n&&pri[v[deep-1]+1]==1){ //递归基,这里用作输出
int i;for(i=0; i< n-1; ++i ) cout<<v[i]<<" ";cout<<v[i]<<endl;
return;
}
for(int i=2; i <= n; ++ i)
if(!vis[i]&&pri[i+v[deep-1]]==1){
vis[i]=true;
v[deep]=i; //访问这个节点
dfs(deep+1); //深度自加
vis[i]=false; //该节点会出现在其他同深度节点的树林中,回退!!关键啊
}
}
int main(){
//freopen("input.txt","r",stdin);
int cnt=1;
while(cin>>n){
clr(vis,0);
v[0]=1;
printf("Case %d:\n",cnt++);
dfs(1);
puts("");
}
return 0;
}
Ctrl + B
Ctrl + I
Ctrl + Q
Ctrl + L
Ctrl + K
Ctrl + G
Ctrl + H
Ctrl + O
Ctrl + U
Ctrl + R
Ctrl + Z
Ctrl + Y
版权声明:本文为博主原创文章,未经博主允许不得转载。
【dfs】hdu 1016 Prime Ring Problem
标签:dfs
原文地址:http://blog.csdn.net/u012717411/article/details/47031107