寻找图中是否存在路径-力扣1971

85 阅读1分钟

寻找图中是否存在路径-力扣1971

最简单的一道关于图的题目。存储方式为邻接表。 直接广度优先搜索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];
    }
};

图的存储方式为邻接表

时间复杂度:O(n+m)O(n+m),n为结点数,m为边数

空间复杂度:O(n+m)O(n+m),邻接表存储空间为O(n+m)O(n+m),辅助队列为O(n)O(n)