#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
using namespace std;
int n,start,dest;
map<int,vector<int>> mp;
set<int> st;
bool dfs(int start,int end){
if(start==end) return true;
for(int i=0;i<mp[start].size();i++){
int v = mp[start][i];
if(st.count(v)==0){ //v还没有访问过
st.insert(v);
if(dfs(v,end)) return true;
}
}
return false;
}
int main(){
int t = 0;
while(scanf("%d",&n)){
if(n==0) break; //维度
printf("Maze #%d ",++t);
mp.clear();
st.clear();
int tmp = 0;
start = dest = 0;
for(int i=0;i<n;i++){ //起点
scanf("%d",&tmp);
start = start*10+tmp;
}
for(int i=0;i<n;i++){ //终点
scanf("%d",&tmp);
dest = dest*10+tmp;
}
int from,to;
while(scanf("%d",&tmp)){
from = to = 0;
if(tmp==-1) break;
from = tmp;
for(int i=1;i<n;i++){
scanf("%d",&tmp);
from = from*10+tmp;
}
for(int i=0;i<n;i++){
scanf("%d",&tmp);
to = to*10+tmp;
}
mp[from].push_back(to);
mp[to].push_back(from);
}
if(dfs(start,dest))
printf("can be travelled\n");
else
printf("cannot be travelled\n");
}
return 0;
}
HDU 1307 基础的dfs,问题在于如何存储图节点和vis数组
猜你喜欢
转载自blog.csdn.net/weixin_42246923/article/details/80892366
今日推荐
周排行