原题链接:Leetcode 1971. 寻找图中是否存在路径
DFS
class Solution {
public:
vector<vector<int>> adj;
vector<int> visit;
bool flag=false;
void dfs(int now,int destination)
{
if(now==destination) flag=true;
visit[now]=1;
for(auto x:adj[now])
{
if(!visit[x]) dfs(x,destination);
}
}
bool validPath(int n, vector<vector<int>>& edges, int source, int destination) {
adj.resize(n);
visit.resize(n);
for(auto x:edges)
{
int a=x[0],b=x[1];
adj[a].push_back(b);
adj[b].push_back(a);
}
dfs(source,destination);
return flag;
}
};
BFS
class Solution {
public:
vector<vector<int>> adj;
vector<int> visit;
bool validPath(int n, vector<vector<int>>& edges, int source, int destination) {
if(source==destination) return true;
adj.resize(n);
visit.resize(n);
for(auto x:edges)
{
int a=x[0],b=x[1];
adj[a].push_back(b);
adj[b].push_back(a);
}
queue<int> q; q.push(source);
visit[source]=1;
while(!q.empty())
{
int now=q.front(); q.pop();
for(auto x:adj[now])
{
if(!visit[x])
{
if(x==destination) return true;
visit[x]=1;
q.push(x);
}
}
}
return false;
}
};