算法项目报告:物流中的最短路径问题

问题描述

物流问题

        有一个物流公司需要从起点A到终点B进行货物运输,在运输过程中,该公司需要途径多个不同的城市,并且在每个城市中都有一个配送站点。为了最大程度地降低运输成本和时间,该公司需要确定经过哪些配送站点,并且给出完成货物运输的最短路径长度。

路线分布图

问题分析

问题简化

        可以将该问题抽象为多段图的最短路径问题,其中每个城市对应图中的一个节点,不同城市之间的距离对应着图中的边权,城市内部的配送站可以看作同一个节点。从起点A到终点B的货物运输路径可以表示为多段图中的一条路径。找到起点A到终点B的最短路径并给出路径长度即可求解此问题。

路线简化图

多段图最短路径的填表
下标123456789
元素值48610812141715
状态转换0->10->20->31->43->55->65->75->87->9

最短路径为:0->3->5->7->9,最短路径长度为15

算法设计

算法设计分析

        多段图的最短路径问题满足最优性原理,可以使用动态规划法求解。

        设Cuv表示多段图的有向边<u,v>上的权值,从源点s到终点t的最短路径长度记为d(s,t),原问题的部分解d(s,v),则下式成立:

d(s,v)=Csv                (<s,v>∈E)

d(s,v)=min{d(s,u)+Cuv}     (<u,v>∈E)

数组arc[n][n]存储图的代价矩阵,数组cost[n]存储最短路径长度,cost[j]表示从源点s到顶点j的最短路径长度,数组path[n]记录转移状态,path[j]表示从源点s到顶点j的路径上顶点j的前一个顶点。

算法伪代码

输入:多段图的代价矩阵

输出:最短路径长度及路径c[n][n]

1.循环变量j从1~n-1重复下述操作,执行填表工作

  1.1考察顶点j的所有入边,对于边<i,j>∈E,执行下述操作

     1.1.1cost[j]=min{cost[i]+c[i][j]}

     1.1.2path[j]=使cost[i]+c[i][j]最小的i

  1.2 j++

2.输出最短路径长度cost[n-1]

3.循环变量i=path[n-1],循环直到path[i]=0,输出最短路径经过的顶点

  3.1输出path[i]

  3.2 i=path[i]

实验结果

最短路径

最短路径为:0->3->5->7->9,最短路径长度是15

算法分析

时间复杂度分析

        算法第一部分是依次计算从源点到各个顶点的最短路径长度,由两层循环嵌套组成,外层循环执行n-1次,内层循环对所有入边进行计算,在所有循环中,每条入边只计算一次。假设图的边数为m,时间复杂度为O(m);第二部分是输出最短路径经过的顶点,设多段图划分为k段,时间复杂度为O(k)。整个算法的时间复杂度为O(m+k)。

空间复杂度分析

        算法的空间复杂度主要体现在图的代价矩阵arc[n][n]的存储,空间复杂度为O(n^2),存储最短路径长度的数组cost[n]的空间复杂度为O(n),转移状态记录数组path[n]的空间复杂度为O(n),所以整个算法的空间复杂度为O(n^2)。

源代码

#include<iostream>
using namespace std;
#define INF 999
int arc[10][10]; // 最多10个点 
int CreateGraph()
{int i, j, k;int weight;int vnum, arcnum;cout << "请输入顶点和边的个数:";cin >> vnum >> arcnum;for (int i = 0; i < vnum; i++) 	// 初始化图的代价矩阵 for (int j = 0; j < vnum; j++)arc[i][j] = INF;for (k = 0; k < arcnum; k++){cout << "请输入第" << k + 1 << "条边的两个顶点和权值:";cin >> i >> j >> weight;arc[i][j] = weight;}return vnum;  // 返回顶点的个数
}
// 求 n个顶点的多段图的最短路径 
int BackPath(int n)
{int i, j, temp;int cost[100], path[100]; // 存储路径长度和路径 for (i = 1; i < n; i++){cost[i] = INF;path[i] = -1;}cost[0] = 0;			// 顶点0为源点 path[0] = -1;for (j = 1; j < n; j++)		// 依次计算后面下标为1到n-1的点(填表) for (i = j - 1; i >= 0; i--){if (cost[i] + arc[i][j] < cost[j]){cost[j] = cost[i] + arc[i][j]; // 更新值 path[j] = i;			// 记录前一个点 }}// 输出路径i = n - 1;cout << "最短路径为:" << i;while (path[i] >= 0)// 前一个点大于0 {cout << "<-" << path[i];i = path[i]; // 更新为前一个点 }cout << endl;return cost[n - 1]; // 返回最短路径长度 
}
int main()
{int graph = CreateGraph();cout << "最短路径长度为:" << BackPath(graph) << endl;return 0;
}

感谢大家的观看

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

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

相关文章

Android:requestLayout、invalidate 和 postInvalidate 的区别

提醒&#xff1a;下面源码来自SDK里Android-34版本 一、requestLayout 点击查看requestLayout官网文档 1.1 requestLayout方法源码 /*** Call this when something has changed which has invalidated the* layout of this view. This will schedule a layout pass of the v…

C++ :友元类

友元类的概念和使用 (1)将类A声明为B中的friend class后&#xff0c;则A中所有成员函数都成为类B的友元函数了 (2)代码实战&#xff1a;友元类的定义和使用友元类是单向的 (3)友元类是单向的&#xff0c;代码实战验证 互为友元类 (1)2个类可以互为友元类&#xff0c;代码实战…

【LeetCode】二叉树的最大深度

目录 一、题目二、解法完整代码 一、题目 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3 示例 2&#x…

Leetcode2160. 拆分数位后四位数字的最小和:

问题描述&#xff1a; 给你一个四位 正 整数 num 。请你使用 num 中的 数位 &#xff0c;将 num 拆成两个新的整数 new1 和 new2 。new1 和 new2 中可以有 前导 0 &#xff0c;且 num 中 所有 数位都必须使用。 比方说&#xff0c;给你 num 2932 &#xff0c;你拥有的数位包括…

怎么剪辑音频文件?4款适合新的音频剪辑软件

是谁还不会音频剪辑&#xff1f;无论是个人音乐爱好者&#xff0c;还是专业音频工作者&#xff0c;我们都希望能找到一款操作简便、功能强大且稳定可靠的音频剪辑工具。今天&#xff0c;我就要为大家带来四款热门音频剪辑软件的体验感分享。 一、福昕音频剪辑 福昕音频剪辑是…

YOLO 模型基础入门及官方示例演示

文章目录 Github官网简介模式数据集Python 环境Conda 环境Docker 环境部署 CPU 版本官方 CLI 示例官方 Python 示例 任务目标检测姿势估计图像分类 Ultralytics HUB视频流示例 Github https://github.com/ultralytics/ultralytics 官网 https://docs.ultralytics.com/zhhttp…

【IEEE出版】第四届能源工程与电力系统国际学术会议(EEPS 2024)

第四届能源工程与电力系统国际学术会议&#xff08;EEPS 2024&#xff09; 2024 4th International Conference on Energy Engineering and Power Systems 重要信息 大会官网&#xff1a;www.iceeps.com 大会时间&#xff1a;2024年8月9-11日 大会…

2024年7月萤火虫航天为NASA发射8颗立方体卫星

作为美国宇航局立方体卫星发射计划的一部分&#xff0c;萤火虫航空航天公司于7月3日在该公司的阿尔法火箭上发射了八颗小型卫星。这枚名为“夏日噪音”的火箭于太平洋夏令时&#xff08;PDT&#xff09;晚上9点04分从加利福尼亚州范登堡空军基地的2号航天发射场成功升空。 立方…

解读vue3源码-响应式篇2

提示&#xff1a;看到我 请让我滚去学习 文章目录 vue3源码剖析reactivereactive使用proxy代理一个对象1.首先我们会走isObject(target)判断&#xff0c;我们reactive全家桶仅对对象类型有效&#xff08;对象、数组和 Map、Set 这样的集合类型&#xff09;&#xff0c;而对 str…

【数学建模】多波束测线问题(持续更新)

多波束测线问题 问题 1建立模型覆盖宽度海水深度重叠长度重叠率 问题二问题三问题四 问题 1 与测线方向垂直的平面和海底坡面的交线构成一条与水平面夹角为 α \alpha α的斜线&#xff08;如下图&#xff09;&#xff0c;称 α \alpha α为坡度。请建立多波束测深的覆盖宽度及…

Python代码,强化学习,深度学习

python代码编写&#xff0c;Python算法设计&#xff0c;强化学习优化&#xff0c;改进模型&#xff0c;训练模型&#xff0c;测试模型&#xff0c;可视化绘制&#xff0c;代编运行结果&#xff0c;交互多模型改进&#xff0c;预测模型&#xff0c;算法修改&#xff0c;Python包…

11.斑马纹列表 为没有文本的链接设置样式

斑马纹列表 创建一个背景色交替的条纹列表。 使用 :nth-child(odd) 或 :nth-child(even) 伪类选择器,根据元素在一组兄弟元素中的位置,对匹配的元素应用不同的 background-color。 💡 提示:你可以用它对其他 HTML 元素应用不同的样式,如 <div>、<tr>、<p&g…

利用PyTorch进行模型量化

利用PyTorch进行模型量化 目录 利用PyTorch进行模型量化 一、模型量化概述 1.为什么需要模型量化&#xff1f; 2.模型量化的挑战 二、使用PyTorch进行模型量化 1.PyTorch的量化优势 2.准备工作 3.选择要量化的模型 4.量化前的准备工作 三、PyTorch的量化工具包 1.介…

openGauss学习笔记-312 openGauss 数据迁移-MySQL迁移-迁移MySQL数据库至openGauss-概述

文章目录 openGauss学习笔记-312 openGauss 数据迁移-MySQL迁移-迁移MySQL数据库至openGauss-概述312.1 工具部署架构图 openGauss学习笔记-312 openGauss 数据迁移-MySQL迁移-迁移MySQL数据库至openGauss-概述 312.1 工具部署架构图 当前openGauss支持对MySQL迁移服务&#x…

【多任务YOLO】 A-YOLOM: You Only Look at Once for Real-Time and Generic Multi-Task

You Only Look at Once for Real-Time and Generic Multi-Task 论文链接&#xff1a;http://arxiv.org/abs/2310.01641 代码链接&#xff1a;https://github.com/JiayuanWang-JW/YOLOv8-multi-task 一、摘要 高精度、轻量级和实时响应性是实现自动驾驶的三个基本要求。本研究…

多光谱的空间特征和光谱特征Statistics of Real-World Hyperspectral Images

文章目录 Statistics of Real-World Hyperspectral Images1.数据集2.spatial-spectral representation3.Separable Basis Components4.进一步分析5.复现一下5.1.patch的特征和方差和论文近似&#xff0c;5.2 spatial的basis和 spectral的basis 6.coef model7.join model Statis…

多视角数据的不确定性估计:全局观的力量

论文标题&#xff1a;Uncertainty Estimation for Multi-view Data: The Power of Seeing the Whole Picture 中文译名&#xff1a;多视角数据的不确定性估计:全局观的力量 原文地址&#xff1a;Uncertainty Estimation for Multi-view Data: The Power of Seeing the Whole …

python用selenium网页模拟时xpath无法定位元素解决方法2

有时我们在使用python selenium xpath时&#xff0c;无法定位元素&#xff0c;红字显示no such element。上一篇文章写了1种情况&#xff0c;是包含iframe的&#xff0c;详见https://blog.csdn.net/Sixth5/article/details/140342929。 本篇写第2种情况&#xff0c;就是xpath定…

类和对象:赋值函数

1.运算符重载 • 当运算符被⽤于类类型的对象时&#xff0c;C语⾔允许我们通过运算符重载的形式指定新的含义。C规定类类型对象使⽤运算符时&#xff0c;必须转换成调⽤对应运算符重载&#xff0c;若没有对应的运算符重载&#xff0c;则会编译报错&#xff1b;&#xff08;运算…

数据旋律与算法和谐:LLMs的微调交响

论文&#xff1a;https://arxiv.org/pdf/2310.05492代码&#xff1a;暂未开源机构&#xff1a;阿里巴巴领域&#xff1a;模型微调发表&#xff1a;ACL 2024 这篇论文《How Abilities in Large Language Models are Affected by Supervised Fine-tuning Data Composition》深入…