DS图—图的最短路径/Dijkstra算法【数据结构】

DS图—图的最短路径/Dijkstra算法【数据结构】

题目描述
给出一个图的邻接矩阵,输入顶点v,用迪杰斯特拉算法求顶点v到其它顶点的最短路径。

输入
第一行输入t,表示有t个测试实例

第二行输入顶点数n和n个顶点信息

第三行起,每行输入邻接矩阵的一行,以此类推输入n行

第i个结点与其它结点如果相连则为距离,无连接则为0,数据之间用空格隔开。

第四行输入一个顶点v,表示求该顶点v到其他顶点的最短路径距离

以此类推输入下一个示例

输出
对每组测试数据,输出:
每行输出顶点v到某个顶点的最短距离和最短路径

每行格式:顶点v编号-其他顶点编号-最短路径值----[最短路径]。没有路径输出:顶点v编号-其他顶点编号–1。具体请参考示范数据

输入样例1
2
5 0 1 2 3 4
0 5 0 7 15
0 0 5 0 0
0 0 0 0 1
0 0 2 0 0
0 0 0 0 0
0
6 V0 V1 V2 V3 V4 V5
0 0 10 0 30 100
0 0 5 0 0 0
0 0 0 50 0 0
0 0 0 0 0 10
0 0 0 20 0 60
0 0 0 0 0 0
V0

输出样例1
0-1-5----[0 1 ]
0-2-9----[0 3 2 ]
0-3-7----[0 3 ]
0-4-10----[0 3 2 4 ]
V0-V1–1
V0-V2-10----[V0 V2 ]
V0-V3-50----[V0 V4 V3 ]
V0-V4-30----[V0 V4 ]
V0-V5-60----[V0 V4 V3 V5 ]

Dijkstra算法

思路

  • 取一个点,称为原点,求该点到其他所有点的最短路径。
  • 先取一个点在集合中,比较该点到其他任意一个点的最短路径
  • 将该点加入集合,更新原点到不在集合中的点的路径是否可以更换为经过新加的点再到该点,如!果更短就更换,再重复这个过程

在这里插入图片描述

#include<bits/stdc++.h>
using namespace std;
int main()
{int t;cin>>t;for(int i = 0; i < t; i++){int n;cin>>n;//记录节点string s[205];//记录路径 不记录起点和终点string arr[205] = {""};//记录节点所在下标map<string,int> m;for(int j = 0; j < n; j++) {cin>>s[j];m[s[j]] = j;}//邻接矩阵int a[205][205] = {0};for(int j = 0; j < n; j++){for(int k = 0; k < n; k++) cin>>a[j][k];}string v;cin>>v;int start = m[v];//记录是否加入集合中,即是否已计算最短路径int visited[205] = {0};visited[start] = 1;while(1){//找到最短路径并记录int flag = -1;int small = 99999999;for(int j = 0; j < n; j++){if(!visited[j] && a[start][j] && a[start][j] < small){small = a[start][j];flag = j;}}//全部找完 退出if(flag == -1) break;visited[flag] = 1;//更新经过新加的点的最短路径for(int j = 0; j < n; j++){if(!visited[j] &&  a[flag][j] && (a[start][j] == 0 || a[start][j] > a[start][flag] + a[flag][j])){a[start][j] = a[start][flag] + a[flag][j];//路径记录arr[j] = arr[flag] + s[flag] + " ";}}}for(int j = 0; j < n; j++){if(j != start){if(a[start][j]) {if(arr[j] == "") printf("%s-%s-%d----[%s %s ]\n",v.c_str(),s[j].c_str(),a[start][j],v.c_str(),s[j].c_str());else printf("%s-%s-%d----[%s %s%s ]\n",v.c_str(),s[j].c_str(),a[start][j],v.c_str(),arr[j].c_str(),s[j].c_str());}else printf("%s-%s--1\n",v.c_str(),s[j].c_str());}}}return 0;
}

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

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

相关文章

设计模式应用之java代码实现(一)

文章目录 前言外观模式享元模式职责链模式命令模式命令模式2命令模式3备忘录模式迭代器模式观察者模式状态模式 前言 本篇博客截取的是**《C#设计模式&#xff08;第2版&#xff09;》这本书课后习题里面的各个设计模式的典型习题并完成java代码实现&#xff0c;每个代码实现都…

【链接MySQL】教你用VBA链接MySQL数据库

hi&#xff0c;大家好呀&#xff01; 之前呢&#xff0c;给大家分享过一个自制链接表管理器的文章&#xff0c;文章中有链接SQL Server数据库的代码&#xff0c;大家对这一段代码比较有兴趣&#xff0c;既然大家有兴趣&#xff0c;那我们今天就来讲一下链接数据库的代码。 这…

nginx配置全解析

#用于指定 Nginx 进程运行的用户和用户组&#xff0c;root 用户具有系统的最高权限&#xff08;潜在的安全漏洞&#xff09;可以用use nginx>非特权用户&#xff08;通常是 nginx&#xff09;的身份运行 user root; #Nginx服务器能够同时处理的连接数量(设置服务器cpu核数)…

抽象工厂模式-C语言实现

说明&#xff1a; 均由 chatgpt生成&#xff0c;实例可以看出无法运行&#xff0c;仅供参考~ 抽象工厂模式&#xff1a; 代码实现&#xff1a; #include <stdio.h>// 定义抽象产品接口 typedef struct {void (*operation)(); } AbstractProductA;typedef struct {voi…

智慧工地管理系统加快推进工程建设项目全生命周期数字化

智慧工地管系统是一种利用人工智能和物联网技术来监测和管理建筑工地的系统。它可以通过感知设备、数据处理和分析、智能控制等技术手段&#xff0c;实现对工地施工、设备状态、人员安全等方面的实时监控和管理。 智慧工地以物联网、移动互联网技术为基础&#xff0c;充分应用大…

WPF面试题:WPF绘图技术介绍

作者:令狐掌门 技术交流QQ群:675120140 csdn博客:https://mingshiqiang.blog.csdn.net/ 文章目录 WPF绘图基本用法绘制直线在XAML中绘制直线在C#代码中绘制直线使用Path绘制直线注意矩形绘制在XAML中绘制矩形在C#代码中绘制矩形设置矩形的位置使用圆角矩形画刷1. SolidColor…

Go 中切片(Slice)的长度与容量

切片长度与容量在 Go 中很常见。切片长度是切片中可用元素的数量&#xff0c;而切片容量是从切片中第一个元素开始计算的底层数组中的元素数量。 Go 中的开发者经常混淆切片长度和容量&#xff0c;或者对它们不够了解。理解这两个概念对于高效处理切片的核心操作&#xff0c;比…

“AI+量子模拟”突破!英伟达与美国量子技术公司SandboxAQ合作

&#xff08;图片来源&#xff1a;网络&#xff09; 11月20日&#xff0c;美国量子技术公司SandboxAQ在美国加利福尼亚州帕洛阿尔托宣布与美国人工智能计算公司英伟达&#xff08;NVIDIA&#xff09;联手&#xff0c;双方将通过人工智能和量子模拟技术助力药物发现、电池设计、…

ESP32-Web-Server编程-HTML 基础

ESP32-Web-Server编程-HTML 基础 概述 HTML(HyperText Markup Language) 是用来描述网页的一种语言。其相关内容存储在前端代码的 .html 文件中。 当浏览器向 web 服务器请求网页时&#xff0c;一个 HTML 文件被发送给浏览器&#xff0c;浏览器解释该文件的内容&#xff0c;…

ASP.NET Core Web API设置响应输出的Json数据格式的两种方式

前言 在ASP.NET Core Web API中设置响应输出Json数据格式有两种方式&#xff0c;可以通过添加System.Text.Json或Newtonsoft.JsonJSON序列化和反序列化库在应用程序中全局设置接口响应的Json数据格式&#xff0c;本文示例使用的是新的Minimal API模式。 JSON序列化和反序列化库…

【TinyALSA全解析(二)】wav和pcm音频文件格式详解

wav和pcm音频文件格式详解 一、本文的目的二、wav和pcm格式文件介绍三、pcm格式文件解析四、wav文件内容解析4.1 文件内容描述4.2 实战分析 五、如何在各种音频格式之间进行转换 /******************************************************************************************…

TikTok数据分析:如何通过数字洞察提升内容质量?

引言 TikTok作为全球最热门的短视频平台之一&#xff0c;每天吸引着亿万用户发布和观看各类内容。在这个充满创意的舞台上&#xff0c;内容质量成为吸引关注和提高曝光度的关键。 而要达到这一目标&#xff0c;数字数据分析成为不可或缺的工具。本文将深入探讨如何通过TikTok数…

为什么需要配置中心

将所有配置放在配置中心&#xff0c;例如Nacos中&#xff0c;有以下几个原因&#xff1a; 集中管理&#xff1a;将配置集中存储在一个地方可以方便管理和维护。通过配置中心&#xff0c;我们可以集中查看、修改和删除配置&#xff0c;而无需去每个应用程序中逐个修改配置文件。…

AI - Steering behaviors(转向系统)

游戏AI角色的转向系统&#xff08;Steering behaviors&#xff09;实现 一些向量的接口是cocos2dx的。但从名字上应该能理解做了什么向量操作 Seek&#xff1a; 获取当前位置指向目标点的向量&#xff0c;转化为单位向量后再乘以速度值&#xff0c;即为所需速度desired velo…

【C语言】结构体

目录 1. 前言2. 结构体类型的声明2.1 结构体的概念2.2 结构的创建2.3 特殊的声明2.4 结构的自引用 3. 结构成员访问操作符4. 结构体内存对齐4.1 对齐规则4.2 为什么存在内存对齐&#xff1f;4.3 修改默认对齐数 5. 结构体传参6. 结构体实现位段6.1 什么是位段6.2 位段的内存分配…

Android系统源码中,在手上没有源码的情况下,需要将编译好的二进制可执行文件放入系统中

文章目录 Android系统源码中&#xff0c;在手上没有源码的情况下&#xff0c;需要将编译好的二进制可执行文件放入系统中 Android系统源码中&#xff0c;在手上没有源码的情况下&#xff0c;需要将编译好的二进制可执行文件放入系统中 在Android.bp文件中&#xff0c;然后整编…

[ACTF2020 新生赛]BackupFile

打开题目就一句话&#xff1a;尝试找到源文件 和上一题一样&#xff0c;用dirsearch扫描网站找到了一下内容 flag.php&#xff0c;0B&#xff0c;虚假flag 瞅一眼index.php.bak是啥 下载了一个文件&#xff0c;把bak后缀删掉&#xff0c;打开了index.php源码 is_numeric()&am…

成为AI产品经理——模型评估(混淆矩阵)

一、混淆矩阵 1.混淆矩阵的介绍 混淆矩阵有两个定义positive&#xff08;正例&#xff09;和negative&#xff08;反例&#xff09;。分别代表模型结果的好和坏。 下图就是一个分类问题的混淆矩阵。横行代表真实的情况&#xff0c;而竖行代表预测的结果。 为了便于理解&…

新疆大学与优艾智合机器人成立联合创新实验室

11月22日至24日&#xff0c;第五届中国工业互联网大赛新疆赛站决赛在新疆维吾尔自治区昌吉回族自治州昌吉市举行。在大赛中崭露头角的优秀解决方案&#xff0c;将为绿色工厂、绿色园区、绿色供应链等建设提供新的动能&#xff0c;促进工业绿色发展。 作为大赛的成果延伸&#…

面试常问-如何判断链表有环、?

如何判断链表有环 题目&#xff1a;解决方案一&#xff1a;解决方案二&#xff1a;解决方案三&#xff1a; 题目&#xff1a; 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;…