Dijkstra(迪杰斯特拉)算法:求给定顶点到其余各顶点的最短路径

算法特点:该算法使用广度优先搜索解决了赋权有向图或者无向图的单源点最短路径问题。(求给定顶点到其余各点的最短路径问题)
算法思路:Dijkstra算法采用的是一种贪心的策略,声明一个数组dis来保存源点到各个顶点的最短距离和一个保存已经找到了最短路径的顶点的集合:T,初始时,原点 s 的路径权重被赋为 0 (dis[s] = 0)。若对于顶点 s 存在能直接到达的边(s,m),则把dis[m]设为w(s, m),同时把所有其他(s不能直接到达的)顶点的路径长度设为无穷大。初始时,集合T只有顶点s。
然后,从dis数组选择最小值,则该值就是源点s到该值对应的顶点的最短路径,并且把该点加入到T中,OK,此时完成一个顶点,
然后,我们需要看看新加入的顶点是否可以到达其他顶点并且看看通过该顶点到达其他点的路径长度是否比源点直接到达短,如果是,那么就替换这些顶点在dis中的值。
然后,又从dis中找出最小值(记得是从还没找到最小值的点中查找的),重复上述动作,直到T中包含了图的所有顶点。
原文链接:https://blog.csdn.net/qq_35644234/article/details/60870719

下面看一道Leetcode原题:743:网络延迟时间
Dijkstra(迪杰斯特拉)算法:求给定顶点到其余各顶点的最短路径_第1张图片

分析:从某个节点K发出信号,要使所有节点都能接收到信号,可通过求出K到其余每个节点的路径的最小值,即只要经过这些值中的最大值时间,所有节点便可以收到K节点发来的信号。eg上图:节点2到节点1花销为1、节点2到节点3花销为1,节点2到节点4花销为2,所以只需要花销为2,节点1、3、4即可收到来自节点2的信号。
下面是代码:

class Solution {
   
public:
    int networkDelayTime(vector<vector<int>>& times, int n, int k) {
   
    	// 若需要在本地编译器运行, times, n, k需要手动输入
        const 

你可能感兴趣的:(原创,算法)