[C] Dijkstra算法——通过边实现松弛

news/2023/11/30 14:42:50

Dijkstra算法——通过边实现松弛

  • 本算法学习指定一个点(源点)到其余各个顶点的最短路径,也叫做单源最短路径例如求下图1号顶点到2,3,4,5,6号顶点的最短路径
  • 这个时候你可能就要问了,为什么不可以直接用上一篇 只有5行的算法:Floyd-Warshall 的方法把所有的最短路都求出来,然后取一行就行了呢?
  • Floyd-Warshall算法的时间复杂度是O(N^3),而本文要介绍的Dijkstra算法时间复杂度是O(N^2),而且会在后续的里介绍优化本算法的方式。当数据过大时,Floyd-Warshall就不能再规定时间内完成了。
    在这里插入图片描述
  • 与Floyd-Warshall算法一样,边的存储方式是二维数组。
  • 这里还需要一个dis数组,来记录1号顶点到每个顶点的距离(长度为n)、
  • 与BFS不同(虽然这个算法和bfs没啥太大联系),这个dis数组无需头指针尾指针。
  • 当然,book数组是不可缺少的。(这就导致了空间复杂度翻倍)

代码实现

#include<stdio.h>
int a[2000][2000];
int inf = 99999999;
int dis[2000], book[2000];
int main()
{int i, j, k, m, n, x, y, s, u, v;int min;scanf("%d %d", &n, &m);/* *///初始化for (i = 1; i <= n; i++)for (j = 1; j <= n; j++)if (i == j)a[i][j] = 0;elsea[i][j] = inf;//读入边(有向图)for (i = 1; i <= m; i++){scanf("%d %d %d", &x, &y, &s);a[x][y] = s;}for (i = 1; i <= n; i++)dis[i] = a[1][i];for (i = 1; i <= n; i++)book[i] = 0;book[1] = 1;//Dijkstra 算法核心语句for (i = 1; i <= n; i++){//找到离1号顶点最近的点min = inf;for (j = 1; j <= n; j++){if (book[j] == 0 && dis[j] < min){min = dis[j];u = j;}}book[u] = 1;for (v = 1; v <= n; v++){if (a[u][v] < inf){if (dis[v] > dis[u] + a[u][v]){dis[v] = dis[u] + a[u][v];}}}}for (i = 1; i <= n; i++){printf("%d ", dis[i]);}return 0;
}

运行结果:
在这里插入图片描述


http://www.ppmy.cn/news/607546.html

相关文章

兑换量子计算机,阅读 | 【量子计算机】构造置换量子门

原标题&#xff1a;阅读 | 【量子计算机】构造置换量子门量子计算机的一个基本组成单位叫量子门(quantum gate)&#xff0c;下面简单介绍些基本概念。量子比特和量子态量子计算机的信息存储单元是一种叫做量子比特(qubit)的实体&#xff0c;它有 2 个基本状态&#xff1a;|0>…

[C] Bellman-Ford边松弛:解决负权边

Bellman-Ford Dijkstra算法是不能解决负权边的&#xff0c;而Bellman-Ford可以完美解决负权边的问题&#xff0c;还可以判断负权回路哦~Dijkstra算法传送门&#xff1a;Dijkstra算法——通过边实现松弛Bellman-Ford的核心代码只有4行&#xff1a; //Bellman-Ford 算法核心语句…

大数据必学Java基础(二十三):方法的定义/调用/重载

文章目录 方法的定义/调用/重载 一、方法的定义和调用 1、什么是方法? 2、方法

Python 正则表达式各种特殊符号 重点

Python 正则表达式 正则表达式是一个特殊的字符序列&#xff0c;它能帮助你方便的检查一个字符串是否与某种模式匹配。 Python 自1.5版本起增加了re 模块&#xff0c;它提供 Perl 风格的正则表达式模式。 re 模块使 Python 语言拥有全部的正则表达式功能。 compile 函数根据…

st计算机编程语言,初学ST语言,有了这篇ST编程语言的相关知识就容易多了~

最近想学习ST语言&#xff0c;想要ST语言以及功能块的相关内容&#xff1f;小编给大家分享一下现成的一些资料。至于更多的ST资料&#xff0c;需要自己慢慢历练与积累。这话是论坛里版主说的。结构化文本(ST-Strutured Text)是一种高级的文本语言&#xff0c;可以用来描述功能&…

[JS] 如何判断一个对象是否为空

js判断空对象的几种方法 一、将对象转为字符串比较 let a {} console.log(JSON.stringify(a) {}) //true二、for…in循环 function isEmpty(obj) {for (let key in obj) {return false}return true } console.log(isEmpty(a)) //true三、Object.getOwnPropertyNames() Ob…

大数据必学Java基础(二十四):数组的引入和学习

文章目录 数组的引入和学习 一、数组的引入 1、习题引入 二、数组的学习

低数值精度推理和训练

低数值精度推理和训练 介绍 如今&#xff0c;大多数商业深度学习应用程序使用 32 位浮点精度 ( ) 来处理训练和推理工作负载。各种研究人员已经证明&#xff0c;深度学习训练和推理都可以以较低的数值精度进行&#xff0c;使用 16 位乘法器进行训练&#xff0c;使用 8 位乘法器…

数据湖(十五):Spark与Iceberg整合写操作

文章目录 Spark与Iceberg整合写操作 一、INSERT INTO 二、MERGE INTO

TVM量化路线图roadmap

TVM量化路线图roadmap INT8量化方案 本文介绍了量化过程的原理概述&#xff0c;提出了在TVM中实现量化过程的建议。  介绍量子化的背景知识  INT8量化-后端代码生成  这个线程只关注TVM中量化层的实现 量子开发 基于搜索的自动量化 提出了一种新的量化框架&#xff0c;…

python 列表生成式、lower()和upper()的使用

参考&#xff1a; http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00138681963899940a998c0ace64bb5ad45d1b56b103c48000 ########################################## lower()&#xff1a;字符串缩小&#xff1a; sASDFss.lower() uppe…

寒武纪智能系统参数

寒武纪智能系统参数 • 思元290 • MLU290-M5智能加速卡 • MLU290-M5 • MLU290-M5智能加速卡搭载寒武纪首颗训练芯片思元290&#xff0c;采用台积电7nm先进制程工艺&#xff0c;采用MLUv02扩展架构&#xff0c;集成了高达460亿的晶体管。MLU290-M5智能加速卡采用开放加速模块…

电脑总有安装计算机更新,为什么我们的电脑总会莫名的安装垃圾软件,看完吓一跳,欢迎关注...

现在电脑已经走进了我们的生活&#xff0c;很多人都已经接触电脑了&#xff0c;然而对于电脑的使用&#xff0c;我们除了知道那些最常见的使用方式之外&#xff0c;大多数人对电脑的其他功能任然是一无所知&#xff0c;当然学习电脑专业和IT的除外了&#xff0c;很多人应该都会…

大数据必学Java基础(二十五):数组的三种初始化方式

文章目录 数组的三种初始化方式 一、静态初始化 二、动态初始化 三、默认初始化 <

数据库中的Schema是什么?

在数据库中&#xff0c;schema&#xff08;发音 “skee-muh” 或者“skee-mah”&#xff0c;中文叫模式&#xff09;是数据库的组织和结构&#xff0c;schemas andschemata都可以作为复数形式。模式中包含了schema对象&#xff0c;可以是表(table)、列(column)、数据类型(data …

GPU指令集技术分析

GPU指令集技术分析 本文将两篇文章整理了一下。 参考文章链接如下&#xff1a; https://zhuanlan.zhihu.com/p/391238629 https://zhuanlan.zhihu.com/p/166180054 一&#xff0e;GPGPU- 指令执行设计 本节主要内容&#xff1a; • GPGPU指令执行简介 o GPGPU指令执行流水线 o …

云原生(三十三) | Kubernetes篇之平台存储系统部署

文章目录 Kubernetes平台存储系统部署 一、查看前提条件 二、部署&修改operator 三、部署集群

mac端锐捷无法验证服务器,MAC地址免认证不成功处理思路

步骤1、 检查在SMP上开启MAC地址免认证的MAC不准确点击查看电脑PC的MAC地址&#xff0c;获取到物理地址&#xff1b;以太网适配器 本地连接:连接特定的 DNS 后缀 . . . . . . . :描述. . . . . . . . . . . . . . . : Intel(R) 82579LM Gigabit Network Connection物理地址. . …

python 3计算KL散度(KL Divergence)

程序 利用python 3计算 import numpy as np import scipy.stats# 随机生成两个离散型分布 x [np.random.randint(1, 11) for i in range(10)] print(x) print(np.sum(x)) px x / np.sum(x) print(px) y [np.random.randint(1, 11) for i in range(10)] print(y) print(np.su…

大数据必学Java基础(二十六):数组的应用题

文章目录 数组的应用题 一、最值问题
最新文章