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

本文主要是介绍【图论】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;
} 

这篇关于【图论】Dijkstra单源最短路径-朴素方法-简单模板(迪杰斯特拉算法)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/896264

相关文章

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Git中恢复已删除分支的几种方法

《Git中恢复已删除分支的几种方法》:本文主要介绍在Git中恢复已删除分支的几种方法,包括查找提交记录、恢复分支、推送恢复的分支等步骤,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录1. 恢复本地删除的分支场景方法2. 恢复远程删除的分支场景方法3. 恢复未推送的本地删除分支场景方法4. 恢复

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

Window Server2016加入AD域的方法步骤

《WindowServer2016加入AD域的方法步骤》:本文主要介绍WindowServer2016加入AD域的方法步骤,包括配置DNS、检测ping通、更改计算机域、输入账号密码、重启服务... 目录一、 准备条件二、配置ServerB加入ServerA的AD域(test.ly)三、查看加入AD域后的变

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

Python中使用defaultdict和Counter的方法

《Python中使用defaultdict和Counter的方法》本文深入探讨了Python中的两个强大工具——defaultdict和Counter,并详细介绍了它们的工作原理、应用场景以及在实际编... 目录引言defaultdict的深入应用什么是defaultdictdefaultdict的工作原理

使用Python进行文件读写操作的基本方法

《使用Python进行文件读写操作的基本方法》今天的内容来介绍Python中进行文件读写操作的方法,这在学习Python时是必不可少的技术点,希望可以帮助到正在学习python的小伙伴,以下是Pyth... 目录一、文件读取:二、文件写入:三、文件追加:四、文件读写的二进制模式:五、使用 json 模块读写