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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章