インタビューの質問04.01。ノード間のアクセス
これは有向グラフであることに注意してください。グラフを隣接リスト(dfsまたはbfs)に置き換えてください
class Solution {
public:
bool findWhetherExistsPath(int n, vector<vector<int>>& graph, int start, int target) {
vector<vector<int> > vec(n);
for(int i=0;i<graph.size();i++){
vec[graph[i][0]].push_back(graph[i][1]);
}
vector<bool> visit(n, false);
// return dfs(vec, visit, start, target);
return bfs(vec, visit, start, target);
}
private:
bool dfs(vector<vector<int> > &vec, vector<bool> &visit, int start, int target){
if(start==target) return true;
visit[start]=true;
for(auto it: vec[start]){
if(!visit[it]){
if(dfs(vec, visit, it, target)) return true;
}
}
visit[start]=false;
return false;
}
bool bfs(vector<vector<int> > &vec, vector<bool> &visit, int start, int target){
queue<int> q;
q.push(start);
while(!q.empty()){
int now = q.front();
if(now==target) return true;
visit[now]=true;
for(auto it: vec[now])
if(!visit[it])
q.push(it);
q.pop();
}
return false;
}
};