简单图的最短路径

图的最短路径

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等数学算法

posted @ 2021-12-16 13:09  言思宁  阅读(70)  评论(0编辑  收藏  举报