简单图的最短路径
图的最短路径
1. 简单图
没有权重;
没有方向;
两点之间最多只有一条边;
没有自连接;
2. 简单图的最短路径:BFS
题目:无向图中的最短路径
给定一个无向图, 图中所有边的长度为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
解题模板:
BFS层次遍历,求每个节点与起始节点的距离。
public class Solution {
public int shortestPath(List<UndirectedGraphNode> graph, UndirectedGraphNode A, UndirectedGraphNode B) {
if(A==null || B==null) return 0;
Queue<UndirectedGraphNode> queue=new ArrayDeque<>();
Map<UndirectedGraphNode, Integer> map=new HashMap();
queue.add(A);
map.put(A, 0);
while (!queue.isEmpty())
{
UndirectedGraphNode temp=queue.poll();
for(UndirectedGraphNode node: temp.neighbors)
{
if(map.containsKey(node))
{
continue;
}
map.put(node, map.get(temp)+1);
queue.add(node);
}
}
return map.get(B);
}
}
3. 复杂图的最短路径
Floyd、 Dijkstra等数学算法