給定一個無向圖, 圖中所有邊的長度爲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;
}
};