lintcode814. 无向图中的最短路径 bfs

给定一个无向图, 图中所有边的长度为1, 再选定图中的两个节点, 返回这两个节点之间最短的路径的长度.

样例
样例 1:

输入: graph = {1,2,4#2,1,4#3,5#4,1,2#5,3}, node1 = 3, node2 = 5
输出: 1
解释: 
  1------2  3
   \     |  | 
    \    |  |
     \   |  |
      \  |  |
        4   5
样例 2:

输入: graph = {1,2,3,4#2,1,3#3,1#4,1,5#5,4}, node1 = 1, node2 = 5
输出: 2
说明
关于树的表示
/**
 * Definition for Undirected graph.
 * struct UndirectedGraphNode {
 *     int label;
 *     vector<UndirectedGraphNode *> neighbors;
 *     UndirectedGraphNode(int x) : label(x),{};
 * };
 */
class Solution {
public:
    /**
     * @param graph: a list of Undirected graph node
     * @param A: nodeA
     * @param B: nodeB
     * @return:  the length of the shortest path
     */
    int shortestPath(vector<UndirectedGraphNode*> graph, UndirectedGraphNode* A, UndirectedGraphNode* B) {
        // Write your code here
        set<UndirectedGraphNode*> visit;//防止重复遍历同一节点
        queue<UndirectedGraphNode*> q;//储存节点
        queue<int>cnt;//储存到达步数
        q.push(A);
        cnt.push(0);
        visit.insert(A);
        while(!q.empty())
        {
            UndirectedGraphNode*cur=q.front();
            int count=cnt.front();
            q.pop();
            cnt.pop();
            for(auto node:cur->neighbors)
            {
                if(node==B) return count+1;
                else if(!visit.count(node))
                {
                    q.push(node);
                    cnt.push(count+1);
                    visit.insert(node);
                }
                else continue;
            }
        }
        return 0;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章