这道图是图里BFS的经典题!算最短路,其实就是分层BFS(分层BFS的关键就是每次for一下queue的大小,一层一层的pop出元素,便可以用一个变量记录层深)
亦可以用一个hash表,来记录distance。
/**
* 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) {
queue<UndirectedGraphNode *> q;
q.push(A);
int distance = 0;
while (!q.empty()) {
int size = q.size();
for (int i = 0; i < size; i++) {
UndirectedGraphNode * head = q.front();
q.pop();
if (head == B) {
return distance;
}
for (UndirectedGraphNode * neighbor: head->neighbors) {
q.push(neighbor);
}
}
distance++;
}
return -1;
}
};