多段图最短路径(动态规划法)

目录

前言

一、多段图的分析

二、算法思路

三、代码如下:

总结


前言

问题描述:设图G=(V, E)是一个带权有向图,如果把顶点集合V划分成k个互不相交的子集Vi (2≤k≤n, 1≤i≤k),使得对于E中的任何一条边(u, v),必有u∈Vi,v∈Vi+m (1≤i≤k, 1<i+m≤k),则称图G为多段图,称s∈V1为源点,t∈Vk为终点。多段图的最短路径问题求从源点到终点的最小代价路径。

 

一、多段图的分析

二、算法思路

具体来说:

  • 首先,将起始节点到自身的成本设置为0,路径设置为-1。
  • 然后,对于除了起始节点以外的所有节点,初始化它们的成本为一个较大的值(这里使用了1000)。然后检查是否有更短的路径可以到达这些节点,如果有则更新成本和路径。
  • 最后,通过遍历路径数组,可以找到起始节点到目标节点的最短路径。

三、代码如下:

int ShortestPath(int arc[100][100],int n){ // 计算图中节点之间的最短路径的函数int i,j,cost[n],path[n]; // 声明变量i, j, cost数组和path数组cost[0]=0; // 将起始节点的成本设置为0path[0]=-1; // 将起始节点的路径设置为-1for(j=1;j<n;i++){ // 循环遍历除起始节点以外的所有节点cost[j]=1000; // 最初将节点的成本设置为一个较大的数值// 检查是否可以通过另一个节点降低当前节点的成本for(cost[i]+arc[i][j]<cost[j]){cost[j]=cost[i]+arc[i][j]; // 更新节点的成本path[j]=i; // 更新节点的路径}}cout<<--n; // 打印最短路径中节点的总数for(i=n;path[i]>=0;){ // 遍历路径数组以找到最短路径cout<<"<-"<<path[i]; // 打印最短路径中的节点i=path[i]; // 更新索引以遍历路径数组}return cost[n-1]; // 返回最短路径的成本
}

总结

优点:
1. 实现了 Dijkstra 算法的基本思想,能够计算带权重的有向图中起点到目标节点的最短路径,并输出最短路径节点的总数和路径。
2. 使用了数组来存储节点的成本和路径信息,节省了空间,对于小规模的图可能有一定的效率。

缺点:算法中使用的数组大小是固定的,如果图的规模超出了数组的大小范围,程序会出现数组越界的问题。如果图的规模小,则浪费了空间。我是一个小菜鸡,欢迎各路大神批评指正!!

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

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

相关文章

MSI U盘重装系统

MSI U盘重装系统 1. 准备一块U盘 首先需要将U盘格式化&#xff0c;这个格式化并不是在文件管理中将U盘里面的所有东西都删干净就可以了&#xff0c;需要在磁盘管理中&#xff0c;将这块U盘格式化&#xff0c;如果这块U盘有分区的话&#xff0c;那将所有的分区都格式化并且删除…

说说你了解过、使用过什么编程语言?比较小他们的优势说说你了解过、使用过什么编程工具?

我了解并且使用过多种编程语言&#xff0c;包括&#xff1a; 1. Python&#xff1a;Python是一种简洁而强大的编程语言&#xff0c;它具有易读性和易学性的特点。它支持面向对象编程和函数式编程&#xff0c;拥有丰富的第三方库和工具&#xff0c;适用于多种应用场景&#xff0…

一个专为程序员设计的精致 Java 博客系统

大家好&#xff0c;我是 Java陈序员。 今天&#xff0c;给大家介绍一个设计精致的博客系统&#xff0c;基于 Java 实现&#xff01; 关注微信公众号&#xff1a;【Java陈序员】&#xff0c;获取开源项目分享、AI副业分享、超200本经典计算机电子书籍等。 项目介绍 bolo-solo …

List过滤重复数据

一、背景&#xff08;着急的同学直接看实现&#xff09; 产品部门向小王提出了一项需求&#xff0c;要求根据多变的条件灵活组合&#xff0c;从一个对象集合中筛选出符合条件的项目。小王初时考虑通过创建多个定制化的equals方法来逐一对比筛选&#xff0c;正当他准备埋头编码…

「架构」SOA(面向服务的架构)

SOA(面向服务的架构)是一种设计模式,用于构建灵活、可互操作和可重用的企业IT系统。SOA基于服务的概念,服务是自包含的、模块化的软件组件,可以被不同的应用程序或业务流程调用。 核心功能: 服务识别与定义:识别业务功能并将其定义为独立的服务。服务抽象:隐藏服务内部…

【面试题】Oracle高频面试题目

简述Oracle中左连接与右连接 &#xff1f; 在Oracle数据库中&#xff0c;左连接&#xff08;left join&#xff09;和右连接&#xff08;right join&#xff09;是两种数据表的连接方式。 左连接是根据左侧表中的所有记录和右侧表中满足连接条件的记录进行匹配&#xff0c;结…

【C++】二叉树进阶(二叉搜索树)

目录 一、内容安排说明二、 二叉搜索树2.1 二叉搜索树概念2.2 二叉搜索树操作2.2.1 二叉搜索树的查找2.2.2 二叉搜索树的插入2.2.3 二叉搜索树的删除 2.3 二叉搜索树的代码实现2.3.1 二叉搜索树的节点设置2.3.2 二叉搜索树类的框架2.3.3 二叉搜索树的查找函数2.3.3.1 非递归方式…

简单易懂的 API 集成测试方法

简介&#xff1a;API 集成测试的重要性 API 集成测试是一类测试活动&#xff0c;用于验证 API 是否满足功能性、可靠性、性能和安全性等方面的预期要求。在多 API 协作的应用程序中&#xff0c;这种测试尤为紧要。 在这一阶段&#xff0c;我们不仅审视单个组件&#xff0c;还…

【postgresql初级使用】索引带来性能提升,它背后默默服务的维护者reindex功不可莫,并发维护与业务的取舍

重建索引reindex ​专栏内容&#xff1a; postgresql使用入门基础手写数据库toadb并发编程 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物. 文章目录 重建索…

【Qt窗口】—— 菜单栏

目录 &#xff08;一&#xff09;创建菜单栏 &#xff08;二&#xff09;在菜单栏中添加菜单 &#xff08;三&#xff09;创建菜单项 &#xff08;四&#xff09;在菜单项之间添加分割线 &#xff08;五&#xff09;综合示例 Qt 窗⼝是通过 QMainWindow类 来实现的。 QMa…

【NOIP2015普及组复赛】题3:求和

题3&#xff1a;求和 【题目描述】 一条狭长的纸带被均匀划分出了 n n n 个格子&#xff0c;格子编号从 1 1 1 到 n n n。每个格子上都染了一种颜色 c o l o r i color_i colori​ &#xff08;用 [ 1 &#xff0c; m ] [1&#xff0c;m] [1&#xff0c;m]当中的一个整数表…

超级好用的C++实用库之环形内存池

&#x1f4a1; 需要该C实用库源码的大佬们&#xff0c;可搜索微信公众号“希望睿智”。添加关注后&#xff0c;输入消息“超级好用的C实用库”&#xff0c;即可获得源码的下载链接。 概述 环形内存池是一种高效的内存管理技术&#xff0c;特别适合于高并发、实时性要求高的系统…

【内核】架构师的精神力量

不要被敌人的气势汹汹所吓倒 不要被尚能忍耐的困难所沮丧 不要被一时的挫折所灰心 道路是曲折的&#xff0c;前途是光明&#xff0c;黑暗即将过去&#xff0c;曙光就在眼前 有利的条件和主动的恢复&#xff0c;产生于再坚持一下的努力之中 以上来自毛选语录。 内心有了精神…

前端如何学会全栈分页开发?源码和思路都在这了

本项目代码已开源&#xff0c;具体见&#xff1a; 前端工程&#xff1a;vue3-ts-blog-frontend 后端工程&#xff1a;express-blog-backend 数据库初始化脚本&#xff1a;关注公众号程序员白彬&#xff0c;回复关键字“博客数据库脚本”&#xff0c;即可获取。 前言 这是博客系…

GMSL2硬件设计V1.1

一、说明 GMSL(Gigabit Multimedia Serial Links),中文名称为千兆多媒体串行链路,是Maxim公司(现属于ADI)推出的一种高速串行接口,通过同轴电缆或屏蔽双绞线(STP)传输高速串行数据,用于汽车摄像头和显示器应用。GMSL2就是指ADI专有的第二代千兆多媒体串行链路技术,传输…

RPA+AI 应用案例集合:自动推流直播

使用场景&#xff1a; 自动定时推流直播 使用技术&#xff1a; python playwright 每个解决一个小问题 During handling of the above exception, another exception occurred:Traceback (most recent call last): File "D:\pythonTryEverything\putdonwphone\not_watch_…

前端开发工程师——webpack

一.环境准备 npm init -y npm i webpack webpack-cli -D 打包命令 npx webpack ./src/main.js --modedevelopment //development开发模式 //production生产模式 npx webpack 直接运行就行 二.加载器loader 在less/stylus/css/sass/images中添加适当的样式 例如&#xff1…

Python筑基之旅-文件(夹)操作和流

目录 一、文件操作 1、文件打开与关闭 2、文件读写 3、文件操作模式 4、文件编码 二、文件夹操作 1、创建文件夹 2、删除文件夹 3、改变当前工作目录 4、获取当前工作目录 5、检查文件/文件夹是否存在 6、遍历文件夹 三、文件路径操作 1、获取绝对路径 2、构建完…