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

news2025/1/11 5:17:42
#include <iostream>
#define Max 503
#define INF 0xcffffff

using 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参考文章如上,另外进行了一点改进。

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

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

相关文章

为什么golang不支持可重入锁

java中的可重入锁 熟悉java的朋友都知道&#xff0c;在java中不管是synchronized还是ReentrantLock都是可重入锁,使用起来也非常简单 synchronized 同步实例方法 public synchronized void instanceMethod() {// 同步方法的代码 }同步静态方法 public static synchronized…

数字营销中的人工智能 --- 完整指南 (By Hubspot)

原文作者&#xff1a;Rebecca Riserbato 原文发布日期&#xff1a;2024年3月7日 翻译和编辑&#xff1a;数字化营销工兵 【引言】 ChatGPT和谷歌巴德已经加入聊天。如果你还没有加入数字营销中关于人工智能&#xff08;AI&#xff09;的对话&#xff0c;你就错过了这个营销…

2006-2022年全国及各省劳动力流动数据

2006-2022年全国及各省劳动力流动数据 1、时间&#xff1a;2006-2022年 2、来源&#xff1a;全国农村经济情况统计资料、农村经营管理统计年报、农村政策与改革统计年报》 3、指标&#xff1a;汇总乡(镇)级单位个数、汇总村民委员会数、汇总村民小组数、汇总农户数(万户)、汇…

项目比赛项目负责人的识人与用人之道

项目比赛项目负责人的识人与用人之道 前言识人&#xff1a;洞察细节&#xff0c;透视本质用人&#xff1a;因材施教&#xff0c;发挥所长总结&#xff1a;识人用人的艺术结语 前言 在项目管理的世界里&#xff0c;每一个项目都像是一场精心策划的比赛&#xff0c;而作为项目负责…

Vue - 关于vue-kinesis 移动动画组件

Vue - 关于vue-kinesis 移动动画组件 vue-kinesis可以根据鼠标移动或滚动条来控制元素动画的动画效果&#xff1b;除此之外&#xff0c;vue-kinesis 还可以设置音频文件&#xff0c;根据音频频率来控制动画的跳动效果。 一、安装vue-kinesis Vue2版本&#xff1a; 1.安装 …

kotlin简介

Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言&#xff0c;被称之为 Android 世界的Swift&#xff0c;由 JetBrains 设计开发并开源。 Kotlin 可以编译成Java字节码&#xff0c;也可以编译成 JavaScript&#xff0c;方便在没有 JVM 的设备上运行。 在Google I/O 2017…

LabVIEW机器人神经网络运动控制系统

LabVIEW机器人神经网络运动控制系统 介绍了如何使用LabVIEW软件和中枢模式发生器(CPG)神经网络实现对舵机驱动爬壁机器人的精准运动控制。通过结合仿生控制理念与高级程序设计&#xff0c;本项目旨在开发一种能自动完成复杂墙面移动任务的机器人。 项目背景 现代机器人技术中…

股市中的“黄金分割线”(原理、画法、用法)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 黄金分割线 📒📝 黄金分割线的基本原理📝 黄金分割线的画法📝 黄金分割线的用法⚓️ 相关链接 ⚓️📖 介绍 📖 股市风云变幻,寻找股价的支撑位和压力位是每位投资者的必修课。在众多分析方法中,有一种名为“黄金分…

算法力扣刷题记录 七十二【93.复原IP地址】

前言 本文练习回溯章节。回溯章节第七篇。 记录 七十二【93.复原IP地址】。 一、题目阅读 有效 IP 地址 正好由四个整数&#xff08;每个整数位于 0 到 255 之间组成&#xff0c;且不能含有前导 0&#xff09;&#xff0c;整数之间用 ‘.’ 分隔。 例如&#xff1a;“0.1.2…

前端面试题整合

一、HTML篇 1、简述一下你对HTML语义化的理解&#xff1f; 用正确的标签做正确的事情&#xff1b; HTML语义化让页面内容结构清晰&#xff0c;便于浏览器、搜索引擎解析&#xff1b; 搜索引擎的爬虫依赖HTML标记来确定上下文和关键字的权重&#xff0c;利于SEO&#xff1b; 便于…

Typro + PicGo 图床 + Docsify + GitHub Pages,玩转个人知识库搭建,写给小白的建站入门课

自动开了这个号以后&#xff0c;陆陆续续写了很多干货文章&#xff0c;一方面是可以帮助自己梳理思路&#xff0c;另一方面也方便日后查找相关内容。 但是&#xff0c;我想检索某个关键词是在之前哪篇文章写过的&#xff0c;就有点捉急了。CSDN 还好&#xff0c;可以检索到相关…

趋动科技陈飞:从小模型到大模型,AI时代下的数据中心建设

自AI大模型横空出世&#xff0c;不断推动着AI从学术界到产业界向大众破圈&#xff0c;新的时代正在来临。11月15-16日&#xff0c;由CDCC主办的“2023第11届数据中心标准大会”在北京国家会议中心盛大开幕。 本届大会的主题围绕“AI时代 重塑未来”&#xff0c;聚焦数据中心领…

pycharm使用fastapi/uvicorn无法reload的问题

pycharm使用fastapi/uvicorn无法reload的问题 一、前言 1、解决方法 &#xff08;1&#xff09;控制台执行uvicorn指令 pycharm的问题&#xff0c;建议控制台直接输uvicorn main:app --reload&#xff0c;而不是在代码里 uvicorn.run() 运行 &#xff08;2&#xff09;将uv…

sharded_inference_engine:MLXDynamicShardInferenceEngine;step

目录 sharded_inference_engine:MLXDynamicShardInferenceEngine 类属性 方法 __init__(self) async def infer_prompt(self, shard: Shard, prompt: str, inference_state: Optional[str] = None) -> (np.ndarray, str, bool) async def infer_tensor(self, shard: …

小白零基础学数学建模系列-Day1-数学建模入门介绍

目录 第1天&#xff1a;数学建模入门介绍一、介绍数学建模的定义和重要性二、常见的数学建模方法概述三、确定问题和建立假设四、模型构建步骤及求解模型的方法五、模型的验证与检验的必要性 作业作业案例分析&#xff1a;实际问题&#xff1a;城市交通拥堵预测问题描述建模方案…

【大模型学习】多模态大模型进行偏好优化

一、简介 训练模型以理解并预测人类偏好是一项复杂的任务。传统方法如SFT&#xff08;监督微调&#xff09;通常需要较高的成本&#xff0c;因为这些算法需要对数据进行特定标签的标注。偏好优化&#xff08;Preference Optimization&#xff09;作为一种替代方案&#xff0c;…

云计算任务调度优化matlab仿真,对比蚁群优化和蛙跳优化

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1 ACO蚁群优化 4.2 蛙跳优化 5.完整程序 1.程序功能描述 云计算任务调度优化,优化目标位任务消耗时间&#xff0c;调度后的经济效益以及设备功耗&#xff0c;对比蚁群优化算法和蛙跳优化…

【IEEE独立出版 | EI稳定检索】第三届人工智能、物联网和云计算技术国际会议(AIoTC 2024)

【IEEE独立出版 | EI稳定检索】 第三届人工智能、物联网和云计算技术国际会议&#xff08;AIoTC 2024&#xff09; 2024 3rd International Conference on Artificial Intelligence, Internet of Things and Cloud Computing Technology 2024年9月13-15日 | 中国武汉 AIoTC …

mysql 日志爆满,删除日志文件,定时清理日志

今天发现网站不能正常访问&#xff0c;于是登陆服务器查找问题。 机智的我随手用命令&#xff1a;df -l 发现 硬盘爆满了&#xff0c;于是就知道问题所在了。 Filesystem 1K-blocks Used Available Use% Mounted on/dev/xvda1 20641404 16963004 16929876 10…

使用 Elastic 和 Mistral 构建多语言 RAG(二)

这篇文章是之前的文章 “使用 Elastic 和 Mistral 构建多语言 RAG&#xff08;一&#xff09;” 的续篇。在这篇文章中&#xff0c;我将展示如何在本地部署中完成在那篇文章中的实现。 注意&#xff1a;由于 semantic text 从 8.15 版本开始提供&#xff0c;你需要至少 8.15 及…