图论学习2
目录
对dijkstra算法的思考
dijkstra算法的实现
01 对dijkstra算法的思考
dijkstra算法的关键思路是,如果对接下来的每一步,都保证权值最短,同时,对于做出该步的决策,保证其最优,则我们就能够得出最小的权值和。
对于这两个关键步骤,算法中的对应为:
-
对每一步保证权值最小:
算法中,在标注了起始点之后,求得各个点距离其的距离矩阵。对于接下来每一步,都选择距离矩阵中权值最小的那一个进行下一步。这里的“进行下一步"也即把暂时点T变为永久点P。
-
对做出该步的决策保证最优:
每当有一个点变为永久点之后,我们都要重新计算距离矩阵。重新计算距离矩阵的目的是:计算出假如从第一点出经过该永久点的总路程。这里的总路程代表的是从原始出发点到最近一次变为永久点能够到达永久点所能够够到点的最短距离。对于该永久点,找出下一个最短距离的意义是,探索从原始点出发能够到达的达永久点所能够够到点的最短距离。如此,当所有点都能够变为永久点时,我们得到了从起始点到任意一点的最短距离。
02 弗洛伊德算法
弗洛伊德算法的核心思想为:
直接在图的带权邻接矩阵中用插入顶点的方法依次构造出n个矩阵d1,d2..dn,使最后得到的矩阵dn成为图的距离矩阵,同时也求出插入点矩阵以便得到两点间的最短路径.
算法实现如下:
03