当前位置: 首页 > news >正文

算法与数据结构--最短路径Dijkstra算法

题目:

算法与数据结构实验题 10.20 迷路

★实验任务

学长经常迷路,现在他又遇到问题了,需要求救。

假设他有一张地图,上面有N个点,M条路,他现在在编号为S的地方,想要去编号为E的地方,请你找到最短路径的长度。

好消息是,每条路的长度都是1。

★数据输入

输入第一行包括四个整数N,M,S,E。表示有N个地点,M条道路,CYP当前所在的地点编号为S,要去的地点编号为E。

接下来M行每行两个整数u,v表示地点u到地点v之间有路可以走。

★数据输出

输出一个整数表示最短的路线距离。

输入示例

5 4 1 5
1 2
2 3
3 4
4 5

输出示例

4

★提示

题中的图为无向图。

地点编号为1~N。

30% 1<=N<=10,1<=M<=20。

100% 1<=N<=100,1<=M<=5000。

100% 1<=u,v<=N。

教程

程序员必会,单源最短路径,迪杰斯特拉算法,看动画就全明白了_哔哩哔哩_bilibili

答案

代码写的很烂。。。

#include <iostream>
#include <limits>
#include <vector>
const int INF = 0x3f3f3f3f;//最大值 
using namespace std;
// 思路总结:选择一个点作为起始点,
// 先将这个点作为中间结点,根据它直接连接的边作为更新数据,更新从顶点到其他顶点的距离
// 寻找与起始距离最近且没有作为中间结点的结点,以该结点作为中间节点,重复步骤2,
// 注意更新的时候注意连接的其他节点未被标记且更新后的路径更短 
// 直到全部顶点都作为了中间节点, 并且完成路径更新,算法就结束了
vector<int> Dijkstra(vector<vector<int>>& graph, int start) {int n = graph.size();     // 存储图中的顶点个数vector<int> visit(n, 0);  // 标记已作为中间节点完成访问的顶点vector<int> dist(n, INF);   // 存储从起点start到其他顶点的最短路径for (int i = 0; i < n; i++) {dist[i] = graph[start][i];  // 将dis数组初始化为图中的路径长度。}visit[start] = 1;  // 标记起始顶点// 每次添加一个点为中间节点,添加n-1次for (int i = 1; i <= n - 1; i++) {// 在dist里寻找与起始距离最近且没有被访问过的顶点,作为中间节点int min = INF;int midIndex = 0;for (int j = 0; j < n; j++) {if (min > dist[j] && visit[j] == 0 &&j!=start) {min = dist[j];minIndex = j;}}visit[midIndex] = 1;// 根据这个点所连接的边来更新数据,更新起点到其他顶点的距离,也就是更新dist数组// 先记录下起点到这个点的距离,以便后序更新int distantToMid = dist[midIndex];// 开始根据graph更新dist数组 for (int j = 0; j < n; j++) {int newDist= distantToMid + graph[minIndex][j];//注意更新的时候该结点未被标记为中间节点,且更新后的值要小于更新前的值 if(graph[minIndex][j]!=INF&&visit[j]!=1&&(newDist<dist[j]))dist[j] = newDist;}}return dist;
}
int main() {int n, m, s, e;cin >> n >> m >> s >> e;vector<vector<int>> graph(n, vector<int>(n));// 都先初始化为无穷大for (int i = 0; i < n; i++) {for (int j = 0; j < n; j++) {graph[i][j] = INF;}}// 输入各点的距离,创建邻接矩阵 for (int i = 0; i < m; i++) {int u, v;cin >> u >> v;graph[u-1][v-1] = 1;graph[v-1][u-1]=1;}// 调用迪杰斯特拉算法vector<int> dist=Dijkstra(graph, s-1);cout << dist[e-1];
}

相关文章:

算法与数据结构--最短路径Dijkstra算法

题目&#xff1a; 算法与数据结构实验题 10.20 迷路 ★实验任务 学长经常迷路&#xff0c;现在他又遇到问题了&#xff0c;需要求救。 假设他有一张地图&#xff0c;上面有N个点&#xff0c;M条路&#xff0c;他现在在编号为S的地方&#xff0c;想要去编号为E的地方&#x…...

ASP.NET Core 8 在 Windows 上各种部署模型的性能测试

ASP.NET Core 8 在 Windows 上各种部署模型的性能测试 我们知道 Asp.net Core 在 windows 服务器上部署的方案有 4 种之多。这些部署方案对性能的影响一直以来都是靠经验。比如如果是部署在 IIS 下&#xff0c;那么 In Process 会比 Out Process 快&#xff1b;如果是 Self Hos…...

跨框架解决方案-Mitosis【Context】

Context Mitosis的context必须是&#xff1a; 在自己的文件中创建文件名必须以context.lite.ts结尾默认导出必须是一个返回context对象的函数 // simple.context.lite.ts import { createContext } from builder.io/mitosis;export default createContext({foo: bar,get foo…...

有哪些重要的项目是用 Python 开发的?

请访问 https://www.python.org/about/success 查看使用了 Python 的项目列表。 阅览 历次 Python 会议 的日程纪要可以看到许多不同公司和组织所做的贡献。 高水准的 Python 项目包括 Mailman 邮件列表管理器 和 Zope 应用服务器。 多个 Linux 发行版&#xff0c;其中最著名的…...

【计算机网络】应用层电子邮件协议

一、电子邮件系统架构 电子邮件是一个典型的异步通信系统&#xff0c;发送方从UA&#xff0c;也就是邮件客户端&#xff0c;通过应用层SMTP协议&#xff0c;传输层tcp协议&#xff0c;发送给发送方的邮件服务器&#xff0c;比如使用的是163邮箱&#xff0c;163提供的SMTP服务器…...

视频剪辑:视频转码实用技巧,批量将MP4转为MP3音频

随着数字媒体设备的普及&#xff0c;视频和音频文件已成为日常生活中的重要组成部分。有时&#xff0c;可能要将MP4视频文件转换为MP3音频文件&#xff0c;以提取其中的音频内容或者进行其他处理。这是耗费时间的任务&#xff0c;那要如何操作呢&#xff1f;本文详解云炫AI智剪…...

体系化学习运筹学基础算法的实践和总结

文章目录 引言目标设计目标实践文章汇总经验总结一则预告 引言 眨眼间已经12月了&#xff0c;眼看着2023年马上要过完了。 女朋友最近总说&#xff0c;工作以后感觉时间过的好快。事实上&#xff0c;我也是这么认为的。年纪越大&#xff0c;越会担心35岁危机的降临。所以&…...

【Java探索之旅】我与Java的初相识(一):Java的特性与优点及其发展史

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; Java入门到精通 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 一. Java语言概述与优势1.1 Java的概述1.2 Java语言的优势 二. Java领域与发展史2.1 Java的使用领域2.…...

重写 AppiumService 类,添加默认启动参数,并实时显示启动日志

一、前置说明 在Appium的1.6.0版本中引入了AppiumService类&#xff0c;可以很方便的通过该类来管理Appium服务器的启动和停止。经过测试&#xff0c;使用该类的实例执行关闭server时&#xff0c;并没有释放端口号&#xff0c;会导致第二次启动时失败。另外&#xff0c;使用该…...

[方法论]allocation 空间内容分配

区分度 typeanalysisrecognitionconclusion type - 阅读 - 理解- 背诵- 听课 看 听 思考- reproduce/ 默写/ 应用- 背- 想- 写analysis 理解 和 背 是不占用现实空间的&#xff0c;可以在脑内不断消化&#xff0c;可以飞配给没有空间的时间块。 阅读 和 写是占用现实空间的…...

家电制造数字孪生5G智能工厂可视化系统,加速家电制造产业数字化转型

5G数字孪生、三维可视化与工业互联网的融合加速中国新型工业化进程&#xff0c;助推我国从制造大国迈进制造强国。家电行业是中国最具国际竞争力的产业之一&#xff0c;在企业数字化转型中&#xff0c;要求企业从生产设备到数字化系统&#xff0c;一系列的数字化、智能化改革已…...

Flink入门之部署(二)

三种部署模式 standalone集群&#xff0c;会话模式部署&#xff1a;先启动flink集群 web UI提交shell命令提交&#xff1a;bin/flink run -d -m hadoop102:8081 -c com.atguigu.flink.deployment.Flinke1_NordCount./Flink-1.0-SNAPSHOT.jar --hostname hadoop102 --port 8888 …...

SQL命令---修改字段名

介绍 使用sql语句修改字段名。 命令 alter table 表名 change 旧字段名 新字段名 新数据类型;例子 将a表id字段名改为id1 alter table a change id id1 int(12) NOT NULL;...

设计模式篇---代理模式

文章目录 概念结构实例静态代理动态代理 总结 概念 代理模式&#xff1a;给某一个对象提供一个代理或占位符&#xff0c;并由代理对象来控制对原对象的访问。 比如我们想从其他国家买东西&#xff0c;但我们无法直接联系外国的商家&#xff0c;可以找代理商&#xff0c;让他们…...

STM32单片机项目实例:基于TouchGFX的智能手表设计(2)UI交互逻辑的设计

STM32单片机项目实例&#xff1a;基于TouchGFX的智能手表设计&#xff08;2&#xff09;UI交互逻辑的设计 目录 一、UI交互逻辑的设计 1.1 硬件平台的资源 1.2 界面切换功能 ​​​​​​​1.3 表盘界面 1.4 运动界面 ​​​​​​​1.6 设置界面 ​​​​​​​1.7 应…...

ES-分析器

分析器 两种常用的英语分析器 1 测试工具 #可以通过这个来测试分析器 实际生产环境中我们肯定是配置在索引中来工作 GET _analyze {"text": "My Moms Son is an excellent teacher","analyzer": "english" }2 实际效果 比如我们有下…...

智能优化算法应用:基于缎蓝园丁鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于缎蓝园丁鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于缎蓝园丁鸟算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.缎蓝园丁鸟算法4.实验参数设定5.算法…...

【开发问题】vue的前端和java的后台,用sm4,实现前台加密,后台解密

sm4加密 vue引入的包代码加密解密 javamaven代码运行结果 vue 引入的包 npm install sm-crypto代码加密解密 加密&#xff1a; key &#xff1a;代表着密钥&#xff0c;必须是16 字节的十六进制密钥 password &#xff1a;加密前的密码 sm4Password &#xff1a;代表sm4加密…...

【算法专题】分治 - 快速排序

分治 - 快速排序 分治 - 快速排序1. 颜色分类2. 排序数组(快速排序)3. 数组中的第K个最大元素4. 库存管理Ⅲ5. 排序数组(归并排序)6. 交易逆序对的总数7. 计算右侧小于当前元素的个数8. 翻转对 分治 - 快速排序 1. 颜色分类 做题链接 -> Leetcode -75.颜色分类 题目&…...

UG NX二次开发(C#)-求曲线在某一点处的法矢和切矢

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 1、前言2、在UG NX中创建一个曲线3、直接放代码4、测试案例1、前言 最近确实有点忙了,好久没更新博客了。今天恰好有时间,就更新下,还请家人们见谅。 今天我们讲一下如何获取一条曲线上某一条曲…...

想找界面清爽操作直观的个人记账app?不妨看看这些实用分享

前阵子跟几个朋友聊起记录日常开支的事儿&#xff0c;一圈聊下来发现&#xff1a;10个人里有8个都试过整理日常收支&#xff0c;最后都放弃了。要么是打开app一堆乱七八糟的内容&#xff0c;找个记账按钮都要翻半天&#xff1b;要么是操作繁琐&#xff0c;买瓶水还要填一堆信息…...

突破Emby功能限制:emby-unlocked的技术实现与应用指南

突破Emby功能限制&#xff1a;emby-unlocked的技术实现与应用指南 【免费下载链接】emby-unlocked Emby with the premium Emby Premiere features unlocked. 项目地址: https://gitcode.com/gh_mirrors/em/emby-unlocked 在媒体服务器领域&#xff0c;Emby作为一款功能…...

揭秘ExplorerPatcher:让Windows界面回归经典的实用工具

揭秘ExplorerPatcher&#xff1a;让Windows界面回归经典的实用工具 【免费下载链接】ExplorerPatcher This project aims to enhance the working environment on Windows 项目地址: https://gitcode.com/GitHub_Trending/ex/ExplorerPatcher 你是否对Windows 11的新界面…...

如何让老旧Mac重获新生?OpenCore Legacy Patcher终极改造指南

如何让老旧Mac重获新生&#xff1f;OpenCore Legacy Patcher终极改造指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一款开源…...

NXOpen 遍历部件并对每个部件加属性

NXOpen 遍历部件并对每个部件加属性 // Mandatory UF Includes #include <uf.h> #include <uf_object_types.h> // Internal Includes #include <NXOpen/ListingWindow.hxx> #include <NXOpen/NXMessageBox.hxx> #include <NXOpen/UI.hxx> //…...

ChatGLM3-6B Streamlit应用案例:代码辅助、长文档摘要、闲聊三合一

ChatGLM3-6B Streamlit应用案例&#xff1a;代码辅助、长文档摘要、闲聊三合一 1. 项目简介&#xff1a;你的本地全能AI助手 想象一下&#xff0c;你正在写一段复杂的代码&#xff0c;卡在某个逻辑上&#xff1b;或者面对一份几十页的技术文档&#xff0c;需要快速提炼核心&a…...

从Eclipse转IntelliJ IDEA的老司机踩坑记:20个必改设置让你的迁移过程更顺滑

从Eclipse转IntelliJ IDEA的老司机踩坑记&#xff1a;20个必改设置让你的迁移过程更顺滑 第一次打开IntelliJ IDEA时&#xff0c;那种既熟悉又陌生的感觉会让任何Eclipse老手感到不安。菜单栏去哪了&#xff1f;我的项目视图怎么变了&#xff1f;为什么快捷键全都不对&#xff…...

OFA-VQA镜像可解释性增强:Grad-CAM热力图可视化答案依据区域

OFA-VQA镜像可解释性增强&#xff1a;Grad-CAM热力图可视化答案依据区域 1. 引言&#xff1a;为什么需要可视化VQA模型的决策依据&#xff1f; 当我们使用视觉问答&#xff08;VQA&#xff09;模型时&#xff0c;经常会遇到一个关键问题&#xff1a;模型给出的答案真的可靠吗…...

Windows下用CMake和VS编译gRPC 1.72.0,我踩过的那些坑(附完整依赖库列表)

Windows平台下gRPC 1.72.0编译实战&#xff1a;从CMake配置到VS链接错误的系统化解法 最近在Windows平台上手动编译gRPC 1.72.0的经历可谓是一波三折。作为一个长期在Linux环境下工作的开发者&#xff0c;这次回到Windows平台进行gRPC编译&#xff0c;遇到了不少特有的挑战。本…...

GLM-4.1V-9B-Base实战教程:批量图片队列处理与异步结果回调机制实现

GLM-4.1V-9B-Base实战教程&#xff1a;批量图片队列处理与异步结果回调机制实现 1. 引言 在实际业务场景中&#xff0c;我们经常需要处理大量图片的分析任务。GLM-4.1V-9B-Base作为一款强大的视觉多模态理解模型&#xff0c;虽然提供了便捷的Web界面&#xff0c;但面对批量图…...