动态规划——多段图的最短路径

2024-03-30 03:18
文章标签 动态 规划 路径 多段

本文主要是介绍动态规划——多段图的最短路径,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述

在这里插入图片描述
在这里插入图片描述

源码

#include<stdio.h>
#include<stdlib.h>
const int INF = 1000;
const int N = 100;//图的最大结点数为100
int arc[N][N];//图的代价矩阵
int cost[N];//存储路径长度
int path[N];//路径
int ClosetPath(int n) {int i,j,temp;for(i=1; i<n; i++) {cost[i]=INF;path[i]=-1;}cost[0]=0;path[0]=-1;//起点for(j=1; j<n; j++) {for(i=j-1; i>=0; i--) {if(arc[i][j]+cost[i]<cost[j]) {cost[j]=arc[i][j]+cost[i];path[j]=i;}}}return cost[n-1];
}
void printPath(int i) {if(i!=-1) {printPath(path[i]);printf("%d-",i);}
}
int main() {int i,j,n,m;//printf("请输入结点个数和边个数:");//scanf("%d%d",&n,&m);n=10;m=18;for(i=0; i<n; i++)for(j=0; j<n; j++)arc[i][j]=INF;
// for(i=0;i<m;i++){
//  int a,b,c;
//  printf("请输入边的两个顶点计权重:");
//  scanf("%d%d%d",&a,&b,&c);
//  arc[a][b]=c;
// }arc[0][1]=4;arc[0][2]=2;arc[0][3]=3;arc[1][4]=9;arc[1][5]=8;arc[2][4]=6;arc[2][5]=7;arc[2][6]=8;arc[3][5]=4;arc[3][6]=7;arc[4][7]=5;arc[4][8]=6;arc[5][7]=8;arc[5][8]=6;arc[6][7]=6;arc[6][8]=5;arc[7][9]=7;arc[8][9]=3;int min = ClosetPath(n);for(i=0;i<n;i++)printf("%3d",path[i]);printf("\n最短路径为:");printPath(path[n-1]);printf("%d",n-1);printf("\n最短距离:%d",min);return 0;
}

这篇关于动态规划——多段图的最短路径的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

一文详解如何查看本地MySQL的安装路径

《一文详解如何查看本地MySQL的安装路径》本地安装MySQL对于初学者或者开发人员来说是一项基础技能,但在安装过程中可能会遇到各种问题,:本文主要介绍如何查看本地MySQL安装路径的相关资料,需... 目录1. 如何查看本地mysql的安装路径1.1. 方法1:通过查询本地服务1.2. 方法2:通过MyS

Python Selenium动态渲染页面和抓取的使用指南

《PythonSelenium动态渲染页面和抓取的使用指南》在Web数据采集领域,动态渲染页面已成为现代网站的主流形式,本文将从技术原理,环境配置,核心功能系统讲解Selenium在Python动态... 目录一、Selenium技术架构解析二、环境搭建与基础配置1. 组件安装2. 驱动配置3. 基础操作模

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

慢sql提前分析预警和动态sql替换-Mybatis-SQL

《慢sql提前分析预警和动态sql替换-Mybatis-SQL》为防止慢SQL问题而开发的MyBatis组件,该组件能够在开发、测试阶段自动分析SQL语句,并在出现慢SQL问题时通过Ducc配置实现动... 目录背景解决思路开源方案调研设计方案详细设计使用方法1、引入依赖jar包2、配置组件XML3、核心配

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

使用Python实现矢量路径的压缩、解压与可视化

《使用Python实现矢量路径的压缩、解压与可视化》在图形设计和Web开发中,矢量路径数据的高效存储与传输至关重要,本文将通过一个Python示例,展示如何将复杂的矢量路径命令序列压缩为JSON格式,... 目录引言核心功能概述1. 路径命令解析2. 路径数据压缩3. 路径数据解压4. 可视化代码实现详解1

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,