迷宫城堡
HDU - 1269正反DFS
#include <bits/stdc++.h>
using namespace std;
#define maxn 12000
int ans,vis[maxn];
vector<int>a[maxn];
vector<int>b[maxn];
void dfsone(int u)
{
vis[u]=1;
ans++;
for(int i=0; i<a[u].size(); i++)
{
int v=a[u][i];
if(!vis[v])
dfsone(v);
}
}
void dfstwo(int v)
{
vis[v]=1;
ans++;
for(int i=0; i<b[v].size(); i++)
{
int u=b[v][i];
if(!vis[u])
dfstwo(u);
}
}
int main()
{
int n,m,x,y;
while(cin>>n>>m&&(n+m)!=0)
{
memset(vis,0,sizeof(vis));
for(int i=1; i<=n; i++)
{
a[i].clear();
b[i].clear();
}
ans=0;
for(int i=0; i<m; i++)
{
cin>>x>>y;
a[x].push_back(y);
b[y].push_back(x);
}
dfsone(1);
if(ans!=n)
{
cout<<"No"<<endl;
continue;
}
ans=0;
memset(vis,0,sizeof(vis));
dfstwo(1);
if(ans!=n)
{
cout<<"No"<<endl;
continue;
}
cout<<"Yes"<<endl;
}
return 0;
}
本文介绍了一道经典的图论题目“迷宫城堡”(HDU-1269),通过正反向深度优先搜索(DFS)的方法来判断迷宫是否能够从起点到达所有位置并返回起点。代码实现清晰展示了如何构建图结构及进行遍历验证。
394

被折叠的 条评论
为什么被折叠?



