最简单的一道关于图的题目。存储方式为邻接表。 直接广度优先搜索BFS,标记从起点出发能够到达的结点,最后看目标结点是否被标记过即可得到是否存在路径。
class Solution {
public:
bool validPath(int n, vector<vector<int>>& edges, int source, int destination) {
vector<vector<int>> adj(n);
int edgesNum = edges.size();
for(int i = 0; i < edgesNum; i ++){
int x = edges[i][0], y = edges[i][1];
adj[x].push_back(y);
adj[y].push_back(x);
}
vector<bool> visited(n, false); // 访问数组
queue<int> q;
q.push(source);
visited[source] = true;
while(!q.empty()){
int v = q.front(); q.pop();
if(v == destination)
break;
int len = adj[v].size(); // 遍历当前结点的所有边所指向的结点
for(int i = 0; i < len; i ++){
int next = adj[v][i];
if(!visited[next]){
q.push(next);
visited[next] = true;
}
}
}
return visited[destination];
}
};
图的存储方式为邻接表
时间复杂度:,n为结点数,m为边数
空间复杂度:,邻接表存储空间为,辅助队列为