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

Dijkstra算法求解最短路径 自写代码

#include <iostream>
#define Max 503
#define INF 0xcffffffusing namespace std;typedef struct AMGraph {							//定义图int vex, arc;int arcs[Max][Max];								//邻接矩阵
};int dist[Max], path[Max];							//dis保存最短路径总权值、path通过保存路径的前驱结点来保存路径
bool final[Max];										//已找到最短路集合int distmin(AMGraph& G) {int flag = 0;int min = INF;for (int i = 1; i <= G.vex; i++) {if (final[i] == false && min > dist[i]) {min = dist[i];flag = i;}}return flag;
}void Dijkstra(AMGraph& G,int x)							//迪杰斯特拉算法
{for (int i = 1; i <= G.vex; i++) {if (i != x) dist[i] = INF;else dist[i] = 0;}memset(final, 0, sizeof(final));memset(path, -1, sizeof(path));for (int i = 1; i <= G.vex - 1; i++) {int minflag = distmin(G);final[minflag] = true;for (int j = 1; j <= G.vex; j++) {if (G.arcs[minflag][j] > 0) {if (dist[minflag] + G.arcs[minflag][j] < dist[j]) {dist[j] = dist[minflag] + G.arcs[minflag][j];path[j] = minflag;}}}}}void find(int x)									//递归输出最短路径
{if (path[x] == -1) {cout << x;}else {find(path[x]);cout << " -> " << x;}return;
}void putin(AMGraph& G)								//输入图
{cin >> G.vex >> G.arc;for (int i = 1; i <= G.vex; i++)				//初始化邻接矩阵for (int j = 1; j <= G.vex; j++)G.arcs[i][j] = INF;for (int i = 1; i <= G.arc; i++){int u, v, w;cin >> u >> v >> w;G.arcs[u][v] = w;}
}void putout(AMGraph& G,int x)								//输出
{//cout << "起点 v1 到各点的最短路程为: \n";for (int i = 1; i < G.vex; i++){cout << dist[i] << " ";}cout << dist[G.vex] << endl;for (int i = 1; i <= G.vex; i++){if (i != x) {cout << "起点 v"<<x<<" 到 v" << i << " 的路径为: ";find(i);cout <<"带权路径长度是"<< dist[i];cout << endl;}}
}int main()
{AMGraph G;putin(G);int point = 3;//要算的是point点到其他点的距离Dijkstra(G,point);putout(G,point);return 0;
}
/*测试数据,王道2025版p243的图。
5 10
1 2 10
1 5 5
2 5 2
5 2 3
2 3 1
5 3 9
5 4 2
3 4 4
4 3 6
4 1 7
*/

http://t.csdnimg.cn/aaE07icon-default.png?t=N7T8http://t.csdnimg.cn/aaE07参考文章如上,另外进行了一点改进。

相关文章:

Dijkstra算法求解最短路径 自写代码

#include <iostream> #define Max 503 #define INF 0xcffffffusing namespace std;typedef struct AMGraph { //定义图int vex, arc;int arcs[Max][Max]; //邻接矩阵 };int dist[Max], path[Max]; //dis保存最短路径总权值、path通过保存路径的前驱结…...

C#如何对某个词在字符串中出现的次数进⾏计数(LINQ)

文章目录 基础知识实现方法基础计数LINQ优化处理标点符号总结 LINQ&#xff08;Language-Integrated Query&#xff09;是C#和VB.NET中强大的查询语言&#xff0c;它可以用来查询集合、SQL数据库、XML文档等。在C#中&#xff0c;我们可以使用LINQ来简化对字符串中特定单词出现次…...

Linux篇之OS层内核参数的调优

Linux内核参数调优 Linux 内核参数的调优和分类是一个复杂的主题&#xff0c;这涉及到系统性能、稳定性和安全性等多个方面。 内核参数主要可以分为以下几类&#xff1a; 1. 内核参数的分类 1.1 系统性能参数 这些参数影响系统的整体性能&#xff0c;包括 CPU 调度、内存管理…...

DLMS/COSEM中的信息安全:安全密钥(上)

加密密钥是一个参数,和加密算法一起使用,加密算法决定了这样一种方式,带有密钥的实体,可以重现和进行逆操作,而没有密钥则不能。对DLMS/COSEM的用途,操作的例子包含: ——明文转换成密文; ——密文转换成明文; ——计算和验证认证码(MAC); …...

Taro基础知识学习

一、安装及使用 CLI工具安装 需要使用 npm 或者 yarn 全局安装 tarojs/cli //使用 npm 安装 CLI npm install -g tarojs/cli//使用 yarn 安装 CLI yarn global add tarojs/cli//使用 cnpm 安装 CLI cnpm install -g tarojs/cli//使用npm info查看Taro的版本信息 npm info ta…...

浮点型在内存中的存储

前言 在上一期中我们讲到了有关于整型在内存中的存储&#xff0c;新朋友可以点开&#x1f517;了解一下&#xff0c;那这一期中我们将讲到的浮点数是不是存储方式和整型一致呢&#xff1f; 一、浮点数在内存中的存储 为了探究这个问题我们先来看一段代码 #include<stdio…...

微信小程序之behaviors

目录 概括 Demo演示 进阶演示 1. 若具有同名的属性或方法 2. 若有同名的数据 3. 若有同名的生命周期函数 应用场景 最后 属性&方法 组件中使用 代码示例&#xff1a; 同名字段的覆盖和组合规则 概括 一句话总结: behaviors是用于组件间代码共享的特性, 类似一…...

java.lang.NoClassDefFoundError: ch/qos/logback/core/util/StatusPrinter2

1、问题 SpringBoot升级报错&#xff1a; Exception in thread "main" java.lang.NoClassDefFoundError: ch/qos/logback/core/util/StatusPrinter2 类找不到&#xff1a; Caused by: java.lang.ClassNotFoundException: ch.qos.logback.core.util.StatusPrinter22、…...

WebRTC ICE配置类型

ICE&#xff08;Interactive Connectivity Establishment&#xff09;是一个用于建立WebRTC和其他实时通信会话中的点对点连接的框架。ICE协议通过尝试多个候选地址&#xff08;候选者&#xff09;来寻找最佳路径来连接两个对等端。ICE有多种配置类型&#xff0c;包括标准ICE、…...

制造知识普及(八)--企业内部物料编码(IPN)与制造商物料编码(MPN)

1、什么是物料编码 通常情况下&#xff0c;物料编码分两种&#xff0c;一种是企业内部物料编码&#xff08;IPN&#xff09;&#xff0c;由于在企业研发制造和生产中确认物料唯一性的&#xff0c;用于承载设计参数要求和技术要求。另一种是制造商物料编码&#xff08;MPN&…...

大模型学习笔记 - InstructGPT中的微调与对齐

LLM 微调 之 InstructGPT中的微调与对齐 LLM 微调 之 InstructGPT中的微调与对齐 技术概览 InstructGPT中的微调与对齐 大体步骤标注数据量模型训练 1. SFT 是如何训练的2. Reward Model是如何训练的3. RLHF 是如何训练的具体讲解RLHF 的loss 函数 模型效果参考链接&#xf…...

Unity近似的Transform实现

Unity近似的Transform实现 #include <stdint.h> #include<iomanip> #include <sstream>#include "Transform.h"//Transform::Transform(const Transform& a){ // LOGW("xww 2"); //}Transform::Transform(glm::vec3 localPositio…...

openvidu私有化部署

openvidu私有化部署 简介 OpenVidu 是一个允许您实施实时应用程序的平台。您可以从头开始构建全新的 OpenVidu 应用程序&#xff0c;但将 OpenVidu 集成到您现有的应用程序中也非常容易。 OpenVidu 基于 WebRTC 技术&#xff0c;允许开发您可以想象的任何类型的用例&#xf…...

基于深度学习的视频伪造检测

基于深度学习的视频伪造检测旨在利用深度学习技术来检测和识别伪造的视频内容。伪造视频&#xff0c;尤其是深伪&#xff08;Deepfake&#xff09;视频&#xff0c;近年来随着生成对抗网络&#xff08;GAN&#xff09;技术的发展&#xff0c;变得越来越逼真和难以识别。这对个人…...

python机器人编程——开发一个pymatlab工具箱(上)

目录 一、前言二、实现过程2.1 封装属性2.2 数据流化显示2.3 输入数据的适应性 三、核心代码说明3.1 设置缓存3.2 随机信号3.3 根据设置绘图 五、总结四、源码PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源ps3.移动小车相关文章资源 一、前言 我们知道m…...

输入类控件

目录 1.Line Edit 代码示例: 录入个人信息 代码示例: 使用正则表达式验证输入框的数据 代码示例: 验证两次输入的密码一致 代码示例: 切换显示密码 2.Text Edit 代码示例: 获取多行输入框的内容 代码示例: 验证输入框的各种信号 3.Combo Box 代码示例: 使用下拉框模拟…...

C++20中的模块

大多数C项目使用多个翻译单元(translation units)&#xff0c;因此它们需要在这些单元之间共享声明和定义(share declarations and definitions)。headers的使用在这方面非常突出。模块(module)是一种language feature&#xff0c;用于在翻译单元之间共享声明和定义。它们是某些…...

Selenium与流行框架集成:pytest与Allure报告

Selenium与流行框架集成&#xff1a;pytest与Allure报告 在现代软件开发中&#xff0c;自动化测试是确保产品质量和快速迭代的关键。Selenium作为业界领先的Web自动化测试工具&#xff0c;其灵活性和强大的功能受到广泛认可。为了进一步提升测试效率和报告质量&#xff0c;本文…...

日撸Java三百行(day17:链队列)

目录 一、队列基础知识 1.队列的概念 2.队列的实现 二、代码实现 1.链队列创建 2.链队列遍历 3.入队 4.出队 5.数据测试 6.完整的程序代码 总结 一、队列基础知识 1.队列的概念 今天我们继续学习另一个常见的数据结构——队列。和栈一样&#xff0c;队列也是一种操…...

Android摄像头采集选Camera1还是Camera2?

Camera1还是Camera2&#xff1f; 好多开发者纠结&#xff0c;Android平台采集摄像头&#xff0c;到底是用Camera1还是Camera2&#xff1f;实际上&#xff0c;Camera1和Camera2分别对应相机API1和相机API2。Android 5.0开始&#xff0c;已经弃用了Camera API1&#xff0c;新平台…...

ok-ww:用智能自动化重构鸣潮游戏体验

ok-ww&#xff1a;用智能自动化重构鸣潮游戏体验 【免费下载链接】ok-wuthering-waves 鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves 项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves 痛点解析&#xff1a;当代游戏玩家…...

bilibili-comment-checker:让B站评论管理效率提升300%的智能分析工具

bilibili-comment-checker&#xff1a;让B站评论管理效率提升300%的智能分析工具 【免费下载链接】bilibili-comment-checker B站评论区自动标注成分油猴脚本&#xff0c;主要为原神玩家识别 项目地址: https://gitcode.com/gh_mirrors/bi/bilibili-comment-checker 当你…...

OpenClaw多通道管理:飞书+钉钉同时接入Phi-3-mini-128k-instruct

OpenClaw多通道管理&#xff1a;飞书钉钉同时接入Phi-3-mini-128k-instruct 1. 为什么需要多通道管理 上周我在整理团队周报时遇到了一个典型问题&#xff1a;部分同事习惯在飞书群里提交需求&#xff0c;另一些则偏好通过钉钉直接我。这种多渠道沟通导致任务分散&#xff0c…...

Phi-4-mini-reasoning辅助C++项目代码审查:内存管理与性能瓶颈推理

Phi-4-mini-reasoning辅助C项目代码审查&#xff1a;内存管理与性能瓶颈推理 1. 引言 在C开发中&#xff0c;内存管理和性能优化一直是开发者面临的棘手问题。传统的人工代码审查不仅耗时耗力&#xff0c;还容易遗漏潜在风险。最近试用Phi-4-mini-reasoning模型进行代码审查时…...

Python open方法详解

编程中的 open() 方法:核心用法全解 open() 是操作文件的核心方法,几乎所有编程语言(Python、Java、JavaScript 等)都有这个方法,最常用、最适合新手的是 Python 的 open(),我直接给你最实用、能马上用的完整指南。 一、Python open() 基础语法 作用:打开文件,并返回…...

LLM强化学习从入门到精通:Composition-RL全解析,收藏这篇就够了!

&#x1f3af; 为什么我们需要Composition-RL&#xff1f; 想象一下&#xff1a;你正在备考数学竞赛&#xff0c;一开始做的都是基础题。随着练习增多&#xff0c;你能轻松答对所有基础题&#xff0c;但这些简单题已经无法帮你进步了——你需要更难的题目来提升能力。 这正是…...

如何快速构建推荐系统:Learn-Data-Science-For-Free中的协同过滤算法终极指南

如何快速构建推荐系统&#xff1a;Learn-Data-Science-For-Free中的协同过滤算法终极指南 【免费下载链接】datascience This repositary is a combination of different resources lying scattered all over the internet. The reason for making such an repositary is to co…...

告别抓瞎!手把手教你用Wireshark解密TLS 1.3流量(附SSLKEYLOGFILE环境变量配置)

从密文到明文&#xff1a;实战解密TLS 1.3流量的完整指南 当你在调试一个API接口时&#xff0c;发现请求总是返回异常状态码&#xff0c;但查看Wireshark抓包却只能看到一堆加密的TLS 1.3数据包&#xff0c;这种"睁眼瞎"的感觉确实令人沮丧。TLS 1.3作为目前最安全的…...

别再死磕PPO了!用DPO微调你的大模型,成本直降80%(附Colab实战代码)

低成本微调大模型实战&#xff1a;DPO算法在Colab上的高效实现 当我在深夜调试第17版PPO训练脚本时&#xff0c;Colab突然弹出的"GPU内存不足"错误提示让我彻底崩溃。作为个人开发者&#xff0c;我们既没有企业级的计算资源&#xff0c;又渴望让开源模型理解人类的真…...

Linux基础之目录结构

初学Linux&#xff0c;首先需要弄清Linux 标准目录结构 / root — 启动Linux时使用的一些核心文件。如操作系统内核、引导程序Grub等。home — 存储普通用户的个人文件 ftp — 用户所有服务httpdsambauser1user2 bin — 系统启动时需要的执行文件&#xff08;二进制&#xf…...