Dijkstra算法图文详解

Dijkstra算法图文详解Dijkstra 算法 Dijkstra 算法算是贪心思想实现的 首先把起点到所有点的距离存下来找个最短的 然后松弛一次再找出最短的 所谓的松弛操作就是 遍历一遍看通过刚刚找到的距离最短的点作为中转站会不会更近 如果更近了就更新距离 这样把所有的点找遍之后就存下了起点到其他所有点的最短距离 问题引入 指定一个点 源点 到其余各个顶点的最短路径 也叫做 单源最短路径 例如求下图中

Dijkstra算法

Dijkstra算法算是贪心思想实现的,首先把起点到所有点的距离存下来找个最短的,然后松弛一次再找出最短的,所谓的松弛操作就是,遍历一遍看通过刚刚找到的距离最短的点作为中转站会不会更近,如果更近了就更新距离,这样把所有的点找遍之后就存下了起点到其他所有点的最短距离。

问题引入:

指定一个点(源点)到其余各个顶点的最短路径,也叫做“单源最短路径”。例如求下图中的1号顶点到2、3、4、5、6号顶点的最短路径。

Dijkstra算法图文详解

Dijkstra算法图文详解 Dijkstra算法图文详解

Dijkstra算法图文详解

Dijkstra算法图文详解Dijkstra算法图文详解

Dijkstra算法图文详解

Dijkstra算法图文详解

 下面我们来模拟一下:

Dijkstra算法图文详解

Dijkstra算法图文详解

 这就是Dijkstra算法的基本思路:

接下来是代码:

已经把几个过程都封装成了基本模块:

#include 
  
    #include 
   
     #include 
    
      #include 
     
       #define Inf 0x3f3f3f3f using namespace std; int map[1005][1005]; int vis[1005],dis[1005]; int n,m;//n个点,m条边 void Init () { memset(map,Inf,sizeof(map)); for(int i=1;i<=n;i++) { map[i][i]=0; } } void Getmap() { int u,v,w; for(int t=1;t<=m;t++) { scanf("%d%d%d",&u,&v,&w); if(map[u][v]>w) { map[u][v]=w; map[v][u]=w; } } } void Dijkstra(int u) { memset(vis,0,sizeof(vis)); for(int t=1;t<=n;t++) { dis[t]=map[u][t]; } vis[u]=1; for(int t=1;t 
       
      
     
    
  

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199400.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 下午1:04
下一篇 2026年3月20日 下午1:04


相关推荐

  • IDEA自动导包(详细教程)

    IDEA自动导包(详细教程)1 打开 IDEA 找到设置进入一下最后点击应用成功 妈妈在也不用担心我手动导包了

    2026年3月18日
    3
  • PLSQL Developer 安装使用教程详解

    PLSQL Developer 安装使用教程详解下载plsqldeveloper:官网下载:https://www.allroundautomations.com/registered-plsqldev/我下载的是10.0.3这个版本,目前版本已经达到了14,下载后顺带把ChineseLanguagepack下载一下,一会可以将软件的语言改为中文;安装plsqldeveloper下载完成后:选择plsqldev文件(注意这里标注的默认安装路径需要修改,改成路径中不含空格和中文的路径,否则,安装了,无法进行远程连接。)安

    2022年6月6日
    56
  • 使用xinetd

    使用xinetdnbsp OpenSource 使用 xinetd 作者 JoseNazario 译者 Fenng 日期 25 Oct 2004 出处 http www dbanotes net 版本 2001 11 27Version0 01 2003 05 23Version1 00Jose 描述了如何着手配置调整 xinetd xinetd 取代了 inetd 并且提供了访问控制

    2026年3月17日
    3
  • QT 多线程 使用UI

    QT 多线程 使用UI直接上代码 qt 的 ui 操作必须在主线程做的 分支线程只能发送消息给主线程进行引导操作 所以平常我们的代码都是直接使用一个线程来调动 UI 但是不同的线程同时需要使用 UI 来显示结果之类的就需要相互协调 如果没有 invoke 之类的方法 可以考虑直接使用 qt 的 Qthread 直接使用 thread 会冲突 1 nbsp nbsp 需要使用 UI 的线程所在的类必须是继承自 Qthread 头文件 includ

    2026年3月17日
    2
  • t检验和u检验_均匀性检验界值表

    t检验和u检验_均匀性检验界值表常用显著性检验适用于计量资料、正态分布、方差具有齐性的两组间小样本比较。包括配对资料间、样本与均数间、两样本均数间比较三种,三者的计算公式不能混淆。应用条件与t检验大致相同,但t′检验用于两组间方差不齐时,t′检验的计算公式实际上是方差不齐时t检验的校正公式。应用条件与t检验基本一致,只是当大样本时用U检验,而小样本时则用t检验,t检验可以代替U检验。用于正态分布、方差齐性的多组间计量比较。常见的…

    2025年6月12日
    4
  • php stderr,php标准输入与输出(STDIN、STDOUT、STDERR)

    php stderr,php标准输入与输出(STDIN、STDOUT、STDERR)例子 phpinput 脚本 cmd 终端复制代码代码示例 askforinputf stdout enteryournam getinput name trim fgets stdin 接收用户输入 writeinputba stdout hello name gt 运行方法 1 运行 cmd2 跳至 ph

    2025年12月6日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号