【图论】Dijkstra单源最短路径-朴素方法-简单模板(迪杰斯特拉算法)

Dijkstra单源最短路径

问题描述

输入n 表示n个结点,m表示m条边,求编号1的结点到每个点的最短路径

输出从第一个点到第n个点的最短路径

思路

  1. 将图g[][]中所有的权值初始化为0x3f表示正无穷

  2. dist[]中所有的值初始化为0x3f表示从第一个点到所有点的距离默认为无穷

  3. dist[1]设置为0表示从第一个点到它自己距离为

  4. 执行n(也就是处理n个点的次数)次如下操作:

    • 找到所有没有确定最短路径的点中,离1点(初始点)最近的那个

      例如: 下面这个图,第一次找到结点1,因为它没有被确定过最短路径, 然后更新到达2的路径为新的最短路为2,到达3的最短路为4

      在这里插入图片描述

#include <iostream>
#include <cstring>
using namespace std;const int N = 510;		
int g[N][N], dist[N];	//g为邻接矩阵 
bool st[N];	  			//表示结点是否已经确定最短路径 
int n, m;				//n为结点数量,m为边数量 int Dijkstra() {memset(dist, 0x3f, sizeof dist);dist[1] = 0;		//从第一个结点到达第一个结点的最短路径为 0 for (int i = 0; i < n; i++ ) {	//循环 n 次处理 n 个结点 int t = -1;for (int j = 1; j <= n; j++ ) {if (!st[j] && (t == -1 || dist[j] < dist[t])) {	//第一次会选择找到的第一个边然后去找最短的边 t = j;	//寻找没有确定最短路径的点当中 到第一个点最近的点 }}//找到没有确定的最近的点for (int j = 1; j <= n; j++) {dist[j] = min(dist[j], dist[t] + g[t][j]);}//从第一个最近的点开始向后更新最短路径 st[t] = true;	//将确定好最短路径的点设置为true表示已经确定了最短路径 }return dist[n];
}//测试数据:
/*
3 3
1 2 2
1 3 4
2 3 1
*/ int main() {ios::sync_with_stdio(false);cin.tie(0);cin >> n >> m; memset(g, 0x3f, sizeof g);while (m -- ) {int u, v, c;cin >> u >> v >> c;g[u][v] = c;	//无重边的情况,如果有重边需要进行取重边的最小值 }int t = Dijkstra();cout << t << endl;
} 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/610752.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【域适应】基于域分离网络的MNIST数据10分类典型方法实现

关于 大规模数据收集和注释的成本通常使得将机器学习算法应用于新任务或数据集变得异常昂贵。规避这一成本的一种方法是在合成数据上训练模型&#xff0c;其中自动提供注释。尽管它们很有吸引力&#xff0c;但此类模型通常无法从合成图像推广到真实图像&#xff0c;因此需要域…

Harmony鸿蒙南向驱动开发-DAC接口使用

功能简介 DAC&#xff08;Digital to Analog Converter&#xff09;是一种通过电流、电压或电荷的形式将数字信号转换为模拟信号的设备&#xff0c;主要用于&#xff1a; 作为过程控制计算机系统的输出通道&#xff0c;与执行器相连&#xff0c;实现对生产过程的自动控制。 在…

去掉el-date-picker弹窗默认回显当前月份的方法

打开日期弹窗&#xff0c;默认会显示当前月份&#xff0c;如图 会发现加了穿透&#xff1a;&#xff1a;v-deep 样式也不生效 .el-month-table .today .cell {color: pink&#xff1b;font-weight: 400;}要让 popper-class“xclass” :append-to-body“false” 这俩配合着使用…

excel添加折线图,如何将日期作为横坐标?

就这么两列数据&#xff0c;想添加一个以日期为横坐标的折线图&#xff0c;但是出来的折线是这个样子&#xff0c;切换行/列也不行&#xff0c;怎么办呢&#xff1f; 实际上这个折线图中包括两条折线&#xff0c;蓝色的是日期的折线&#xff0c;橙色的是时间的折线&#xff0c;…

计算机网络——NAT技术

目录 前言 前篇 引言 SNAT&#xff08;Source Network Address Translation&#xff09;源网络地址转换 SNAT流程 确定性标记 DNAT&#xff08;Destination Network Address Translation&#xff0c;目标网络地址转换&#xff09; NAT技术重要性 前言 本博客是博主用于…

学习Rust的第二天:Cargo

We dive into Cargo, the powerful and convenient build system and package manager for Rust. 基于Steve Klabnik的《The Rust Programming Language》一书&#xff0c;我们深入了解Cargo&#xff0c;这是Rust强大而方便的构建系统和包管理器。 Cargo is a robust and effic…

DevExpress WinForms中文教程 - 如何通过UI测试自动化增强应用可靠性?(二)

DevExpress WinForm拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜任…

选择正确的Go Module Path

最近我在查看项目代码时&#xff0c;注意到有人在go.mod文件中将module path写为com.example.foo了。根据这个写法&#xff0c;相信屏幕前的读者也可以推断出这位开发人员可能是从Java阵营转到Go的。实际开发中可能有很多开发者会使用类似的内容作为module path&#xff0c;但这…

STM32 SPI CRC polynominal = 7 含义

STM32 SPI CRC polynominal 7 含义 1. CRC校验1.1 多项式公式1.2 多项式简记式1.3 数据宽度1.4 初始值与结果异或值1.5 输入值反转与输出值反转 2. 常见的CRC算法3. CRC校验算法前置知识3.1 异或3.2 模2加法3.3 模2减法3.4 模2除法 4. CRC原理5. 计算示例6. STM32 SPI 中的CRC…

C++常用技巧与算法总结(简洁)

前言警告&#xff1a; 1、注意数据的边界&#xff0c;数组不能越界&#xff01; 2、 时间复杂度 3、开long long 4、注意输出的四舍五入 printf("%d %.0f\n",k,sum*1.0/k);//double类型输出会自动四舍五入&#xff1b; 5、让Dev C支持C11 先在dev的【工具】里找…

SpringMVC中拦截所有请求后,<mvc:resources/>不起作用

报错显示 出现这种问题的前提是&#xff0c;用DispatcherServlet将所有的请求拦截&#xff0c;然后导致静态资源无法访问。 拦截代码如下&#xff0c;配置卸载web.xml文件中。 <servlet><servlet-name>dispatcherServlet</servlet-name><servlet-class&…

Apache SeaTunnel 社区 3 月月报

各位热爱 SeaTunnel 的小伙伴们&#xff0c;SeaTunnel 社区 3 月月报来啦&#xff01;这里将记录 SeaTunnel 社区每个月的重要更新&#xff0c;并评选出月度之星&#xff0c;欢迎关注。 SeaTunnel 月度 Merge Stars 感谢以下小伙伴 3 月为 Apache SeaTunnel 做的精彩贡献&…