Floyd算法实现实际问题——18个城市间最优路线规划
离散数学大作业
——利用Floyd算法计算两城市间最优路径及距离
代码在最下面
一.提出问题
在交通网络非常发达、交通工具和交通方式不断更新的今天,人们在出差、旅游或做其他出行时,不仅关心节省交通费用,而且对里程和所需要的时间等问题也感兴趣。对于这样一个人们关心的问题,可用一个图结构来表示交通网络系统,利用计算机建立一个交通咨询系统。图中的顶点表示城市,边表示城市之间的交通关系。这个交通系统可以回答出行旅客提出的各种路径选择问题。例如,问题之一:“一位旅客要从 A 城到 B 城,他希望选择一条路径最短”。设计一个程序,实现对两个城市最短路径的查询。
二.模型化
精力有限,顾及不到所有城市在地图上选取了18个城市作为图的结点,
代码实现过程用汉字比较繁琐,所以在此将18个城市标号0-17进行路径问题的计算
为了尽量体现Floyd算法的计算过程,在次假定只有结点周围的且不超过1000km的城市有有向边,边的长度设为百度地图所搜索到的最短路程,剩余的城市间距离设置为最大值5000km,即不可直接到达。
例如合肥的有向边链接了郑州、南京、武汉、南昌,虽然合肥离上海、杭州也很近,但在此为了突出Floyd算法,不赋予该两座城市之间的边,而是借助南京这个结点到达。
(人手搜索,按序号找,手敲的,真的累死我了啊啊啊啊啊啊啊)
之后通过Floyd算法计算各个城市间最短距离,并且记录路径,最后格式化输出。
三. 编程实现
1、城市代号与名字匹配结构体构建
结构体Vnode,用于存储城市名字字符串,之后再通过城市代号,达到输出汉字的效果,使呈现更明确
2、静态变量
(啃了之前写noj数据结构实验11题的老本)
int lu[maxnum][maxnum][maxnum]:第一个值设为a,第二个值设为b,第三个值设为c,a,b用于定位某个节点到某个节点,c用于记录路线,即,数组用于记录某个节点到各个节点最短路径的途经节点。
wei[maxnum][maxnum]:用于记录lu[maxnum][maxnum][maxnum]数组的路径最前端此时位于第几个位置,便于更新途径节点
3、主函数模块
函数调用关系如图
4、城市名初始化函数模块
(没选到的城市无意冒犯,全部省会弄下来我会死的
Floyd算法实现实际问题——18个城市间最优路线规划相关推荐
- Floyd算法应用-医院选址问题
1)问题描述 n个村庄之间的交通图可以用有向网图来表示,图中边<vi, vj>上的权值表示从村庄i到村庄j的道路长度.现在要从这n个村庄中选择一个村庄新建一所医院,问这所医院应建在哪个村庄 ...
- 最短路径之Floyd算法
Floyd-Warshall算法,简称Floyd算法,用于求解任意两点间的最短距离,时间复杂度为O(n^3). 输出权值大小及路径: #include <iostream> #includ ...
- 基础算法题——城市间最短路程(Floyd算法)
Floyd算法 通过一个图的权值矩阵求出它的每两点间的最短路径矩阵. 其状态转移方程如下:map[i,j]:=min{map[i,k]+map[k,j],map[i,j]} 问题描述 现已知有N(N& ...
- 7-1 城市间紧急救援 (25 分)(最短路径:斯特拉算法)
7-1 城市间紧急救援 (25 分) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一条连接两个城市的快速道 ...
- 基于无向图的城市间快递派送算法
1.题目分析 1.1题目简介 假设你为快递公司设计快递投递路线优化程序.(1)每个市有个中转分发点,有些城市之间有直通路线,有些城市之间没有直通路线:(2)城市与城市之间的运费计算公式为:距离*1 ...
- L2-001 城市间紧急救援 (25分)(迪杰斯特拉算法)
L2-001 城市间紧急救援 (25分)(迪杰斯特拉算法) 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图.在地图上显示有多个分散的城市和一些连接城市的快速道路.每个城市的救援队数量和每一 ...
- 图的所有顶点间的最短路径(Floyd算法)
问题描述 对每一对顶点vi ≠ vj,求出vi与vj之间的最短路径和最短路径长度 Floyd算法 Floyd(Floyd-Warshall)算法又称为插点法,是一种利用动态规划的思想寻找给定的加权图中 ...
- 怎么使用计算机算法,浅谈如何在用计算机来更好的实现Floyd算法
[摘 要]本文主要介绍了数学建模中的一个常用的方法(Floyd算法).我们首先介绍了邻接矩阵的定义.其次,阐述了Floyd算法的具体内容以及Floyd算法的改进.最后,给出了Floyd算法的广泛应用, ...
- 弗洛伊德算法c语言path,Floyd算法(弗洛伊德算法)
算法描述: Floyd算法又称为弗洛伊德算法,插点法,是一种用于寻找给定的加权图中顶点间最短路径的算法.从图的带权邻接矩阵A=[a(i,j)] n×n开始,递归地进行n次更新,即由矩阵D(0)=A,按 ...
- 最短路径的求解方法(Dijkstra、Floyd算法)
用带权的有向图表示一个交通运输网,图中: 顶点--表示城市 边--表示城市间的交通联系 权--表示此线路的长度或沿此线路运输所花的时间或费用等 问题:从某顶点出发,沿图的边到达另一顶点所经过的路径中的 ...
最新文章
- ipad编程软件python-iPad可用的软件编程软件有吗?
- matlab的讲稿ppt,Matlab初步(讲稿200508)之四
- 数据结构与算法之RandomPool结构和岛问题
- 21行代码AC_【蓝桥杯】承压计算(解题通法+技巧)
- Linux下多显卡选择绘制实验记录
- 【SpringBoot 2】(一)基础知识了解学习
- extjs 中动态给gridpanel 复选框赋值
- JAVA获取安卓系统下usb_Android 获取 usb 权限的两种方法
- 透视Datatable
- 4.3.8 使用模板
- 0909操作系统初感
- inside MPQ
- Linux打补丁遇到Hunk# succeeded at提示
- 【标准算例数据源】作业车间、流水车间、柔性作业车间、其它
- linux 保存bmp 图片
- github 创建工程
- Android gradient 三色渐变背景 Shap
- 如何判断是否受到DDOS攻击?被攻击该如何解决?
- LWIP (chapter 2.01) pbuf数据包缓存
- 中标麒麟ky10 server版rpm安装redis6.2.6