蔬菜运输问题--数学建模
- 格式:doc
- 大小:317.79 KB
- 文档页数:22
蔬菜运输问题数学建模
蔬菜运输问题可以通过数学建模来解决。
以下是一种可能的数学建模方法:
1. 定义变量:
- X[i][j]:表示从地点i运送蔬菜到地点j的数量,其中i和j 是地点的编号。
- D[i][j]:表示从地点i到地点j的运输距离。
2. 目标函数:
由于蔬菜运输的目标通常是最小化总运输成本或最短运输时间,可以设置目标函数为最小化运输成本或最小化运输时间。
具体的目标函数可以根据具体情况来定。
3. 约束条件:
- 每个地点的进出蔬菜数量必须平衡:对于每个地点i,进出的蔬菜数量之和要等于该地点的需求或产出量。
即∑X[i][j] - ∑X[j][i] = 0。
- 运输量不能超过运输能力限制:对于每个地点i到地点j的运输量X[i][j],必须满足X[i][j] <= C[i][j],其中C[i][j]表示地点i到地点j的运输能力限制。
- 运输量必须是非负数:X[i][j] >= 0。
4. 其他要求和限制:
- 可以考虑添加其他特殊要求和限制,如运输时间窗限制、调度顺序要求等。
5. 求解方法:
运用数学规划方法,如线性规划或整数规划,求解目标函数和约束条件得到最优的蔬菜运输方案。
2003高教社杯全国大学生数学建模竞赛B 题参考答案注意:以下答案是命题人给出的,仅供参考。
各评阅组应根据对题目的理解及学生的解答,自主地进行评阅。
问题分析:本题目与典型的运输问题明显有以下不同: 1. 运输矿石与岩石两种物资; 2. 产量大于销量的不平衡运输; 3. 在品位约束下矿石要搭配运输; 4. 产地、销地均有单位时间的流量限制; 5. 运输车辆每次都是满载,154吨/车次; 6. 铲位数多于铲车数意味着最优的选择不多于7个产地; 7. 最后求出各条路线上的派出车辆数及安排。
运输问题对应着线性规划,以上第1、2、3、4条可通过变量设计、调整约束条件实现;第5条使其变为整数线性规划;第6条用线性模型实现的一种办法,是从120710 C 个整数规划中取最优的即得到最佳物流;对第7条由最佳物流算出各条路线上的最少派出车辆数(整数),再给出具体安排即完成全部计算。
对于这个实际问题,要求快速算法,计算含50个变量的整数规划比较困难。
另外,这是一个二层规划,第二层是组合优化,如果求最优解计算量较大,现成的各种算法都无能为力。
于是问题变为找一个寻求近优解的近似解法,例如可用启发式方法求解。
调用120次整数规划可用三种方法避免:(1)先不考虑电铲数量约束运行整数线性规划,再对解中运量最少的几个铲位进行筛选;(2)在整数线性规划的铲车约束中调用sign 函数来实现;(3)增加10个0-1变量来标志各个铲位是否有产量。
这是一个多目标规划,第一问的目标有两层:第一层是总运量(吨公里)最小,第二层是出动卡车数最少,从而实现运输成本最小。
第二问的目标有:岩石产量最大;矿石产量最大;运量最小,三者的重要性应按此序。
合理的假设主要有:1. 卡车在一个班次中不应发生等待或熄火后再启动的情况;2. 在铲位或卸点处因两条路线(及以上)造成的冲突时,只要平均时间能完成任务即可,不进行排时讨论;3. 空载与重载的速度都是28km/h ,耗油相差却很大,因此总运量只考虑重载运量;4. 卡车可提前退出系统。
货物配送问题数学建模一、问题描述在物流配送中,如何合理地安排货物的配送路线,使得货物能够最快地到达目的地,同时保证配送成本最小化,是一个重要的问题。
本文将以某物流公司为例,探讨如何利用数学建模的方法解决货物配送问题。
二、问题分析该物流公司需要将货物从A地配送到B地,其中A地有n个发货点,B地有m个收货点。
每个发货点的货物重量不同,每个收货点的需求量也不同。
为了保证配送效率,该物流公司需要在每个发货点选择最优的配送路线,使得货物能够最快地到达目的地,同时保证配送成本最小化。
具体而言,该问题需要考虑以下因素:1.货物重量:每个发货点的货物重量不同,需要考虑不同重量的货物在配送过程中的影响。
2. 配送路线:如何选择最优的配送路线,使得货物能够最快地到达目的地,同时保证配送成本最小化。
3. 配送成本:配送成本包括人工成本、车辆成本、油费等,需要考虑如何在保证配送效率的同时最小化配送成本。
三、数学建模为了解决上述问题,我们可以采用数学建模的方法。
具体而言,我们可以将该问题建模为一个最小费用最大流问题。
最小费用最大流问题是图论中的一个经典问题,其主要思想是在网络流的基础上,引入费用这一概念,使得在满足流量限制的同时,最小化总费用。
在本问题中,我们可以将发货点看作源点,收货点看作汇点,货物的重量看作每个边的流量限制,配送成本看作每个边的费用。
具体而言,我们可以将该问题建模为以下几个步骤:1. 建立网络模型:将发货点和收货点看作网络中的节点,将货物的配送路线看作网络中的边,建立网络模型。
2. 确定流量限制:将每个发货点的货物重量看作每个边的流量限制。
3. 确定费用:将配送成本看作每个边的费用。
4. 求解最小费用最大流:利用最小费用最大流算法,求解最小费用最大流,得到最优的配送路线。
四、实际案例为了验证上述方法的有效性,我们在某物流公司的实际配送中进行了测试。
具体而言,我们将该问题建模为一个最小费用最大流问题,并利用最小费用最大流算法求解最优的配送路线。
运输问题摘要本文主要研究的是货物运输的最短路径问题,利用图论中的Floyd算法、Kruskal算法,以及整数规划的方法建立相关问题的模型,通过matlab,lingo 编程求解出最终结果。
关于问题一,是一个两客户间最短路程的问题,因此本文利用Floyd算法对其进行分析。
考虑到计算的方便性,首先,我们将两客户之间的距离输入到网络权矩阵中;然后,逐步分析出两客户间的最短距离;最后,利用Matlab软件对其进行编程求解,运行得到结果:2-3-8-9-10总路程为85公里。
关于问题二,运输公司分别要对10个客户供货,必须访问每个客户,实际上是一个旅行商问题。
首先,不考虑送货员返回提货点的情形,本文利用最小生成树问题中的Kruskal算法,结合题中所给的邻接矩阵,很快可以得到回路的最短路线:1-5-7-6-3-4-8-9-10-2;然后利用问题一的Floyd算法编程,能求得从客户2到客户1(提货点)的最短路线是:2-1,路程为50公里。
即最短路线为:1-5-7-6-3-4-8-9-10-2-1。
但考虑到最小生成树法局限于顶点数较少的情形,不宜进一步推广,因此本文建立以路程最短为目标函数的整数规划模型;最后,利用LINGO软件对其进行编程求解,求解出的回路与Kruskal算法求出的回路一致。
关于问题三,是在每个客户所需固定货物量的情况下,使得行程之和最短。
这样只要找出两条尽可能短的回路,并保证每条线路客户总需求量在50个单位以内即可。
因此我们在问题二模型的基础上进行改进,以货车容量为限定条件,建立相应的规划模型并设计一个简单的寻路算法,对于模型求解出来的结果,本文利用Kruskal算法结合题中所给的邻接矩阵进行优化。
得到优化结果为:第一辆车:1-5-2-3-4-8-9-1,第二辆车:1-7-6-9-10-1,总路程为280公里。
关于问题四,在问题一的基础上我们首先用Matlab软件编程确定提货点到每个客户点间的最短路线,然后结合一些限定条件建立一个目标模型,设计一个较好的解决方案进行求解可得到一种很理想的运输方案。
一,论文题目人,狼,羊,菜渡河问题二,摘要将人狼羊菜依次用一个四维向量表示,对每一分量按二进制法则进行运算,将可行状态与转移状态表示出来,将这种运算方法设计为Matlab语言,进行计算机的计算,最终求得所得结果。
三,问题的重述一个摆渡人希望用一条小船把一只狼,一只羊和一篮白菜从一条河的左岸渡到右岸去,而船小只能容纳人,狼,羊,菜中的两个,绝不能在无人看守的情况下,留下狼和羊或羊和白菜在一起,求应怎样渡河才能把狼羊白菜都运过去?四,模型的假设、符号约定和名词解释我们可以用四维向量来表示状态,其中第一分量表示人,第二分量表示狼,第三分量表示羊,第四分量表示菜;当人或物在此岸时相应分量取1,在对岸时则取0。
根据题意,人不在场时,狼要吃羊,羊要吃菜,因此,人不在场时,不能将狼与羊,羊与菜留在河的任一岸。
例如,状态(0,1,1,0)表示人和菜在对岸,而狼和羊在此岸,这时人不在场的情况下狼要吃羊,因此,这个状态是不可行的。
我们通过穷举法将所有可行的状态列举出来,可行的状态有(1,1,1,1),(1,1,1,0),(1,1,0,1),(1,0,1,1),(1,0,1,0)(0,1,0,1),(0,1,0,0),(0,0,1,0),(0,0,0,1),(0,0,0,0)可行状态共有十种。
每一次的渡河行为改变现有的状态。
用1 表示过河,0 表示未过河。
例如,(1,1,0,0)表示人带狼过河。
状态转移只有四种情况,用如下的向量表示。
(1,0,0,0),(1,1,0,0),(1,0,1,0),(1,0,0,1)五,模型的建立、模型求解、模型的结果和检验将可取状态及可取运载分别编成矩阵。
共分为五个m文件,一个主文件xduhe.m数,分别为:1、duhe(L,B,M,s)函数。
用来实现渡河总思路。
思路为:将起始矩阵A分别与可取运载相加(使用二进制法则),判断相加后的矩阵C是否是【0,0,0,0】,如果是,则渡河成功。
否则,用fuhe(C,M) 函数判断C是否是可取状态,如果是,则打印并将C与初始矩阵合并成新矩阵,继续调用duhe.m函数。
运筹学运输问题例题数学建模运筹学是一门研究如何在有限的资源和多种约束条件下,寻求最优或近似最优解的科学。
运输问题是运筹学中的一个重要分支,它主要研究如何把某种商品从若干个产地运至若干个销地,使总的运费或总的运输时间最小。
本文将介绍运输问题的数学建模方法,以及用表上作业法求解运输问题的步骤和技巧。
同时,本文还将给出几个典型的运输问题的例题,帮助读者理解和掌握运输问题的求解过程。
运输问题的数学建模运输问题可以用以下的数学模型来描述:设有m 个产地(或供应地),分别记为A 1,A 2,…,A m ,每个产地i 的产量(或供应量)为a i ;有n 个销地(或需求地),分别记为B 1,B 2,…,B n ,每个销地j 的需求量为b j ;从产地i 到销地j 的单位运费(或单位运输时间)为c ij ;用x ij 表示从产地i 到销地j 的运量,则运输问题可以归结为以下的线性规划问题:其中,目标函数表示总的运费或总的运输时间,约束条件表示每个产地的供应量必须等于其产量,每个销地的需求量必须等于其销量,以及每条运输路线的运量不能为负数。
在实际问题中,可能出现以下几种情况:产销平衡:即∑m i =1a i =∑n j =1b j ,也就是说总的供应量等于总的需求量。
这种情况下,上述数学模型可以直接应用。
产大于销:即∑m i =1a i >∑n j =1b j ,也就是说总的供应量大于总的需求量。
这种情况下,可以增加一个虚拟的销地,其需求量等于供需差额,且其与各个产地的单位运费为零。
这样就可以把问题转化为一个产销平衡的问题。
产小于销:即∑m i =1a i <∑n j =1b j ,也就是说总的供应量小于总的需求量。
这种情况下,可以增加一个虚拟的产地,其产量等于供需差额,且其与各个销地的单位运费为零。
这样也可以把问题转化为一个产销平衡的问题。
弹性需求:即某些销地对商品的需求量不是固定不变的,而是随着商品价格或其他因素而变化。
2023数学建模国赛c题思路--蔬菜类商品的自动定价与补货决策一、问题概述蔬菜类商品定价与补货是一个复杂的决策过程,涉及多方面因素,包括市场需求、成本、竞争状况等。
在本次数学建模比赛中,我们将重点关注2023年的蔬菜市场,运用数学模型和方法对蔬菜类商品进行自动定价和补货决策。
二、思路与方法1.数据收集与处理数据是制定有效决策的关键。
首先,我们需要收集关于蔬菜类商品的各种数据,包括但不限于:市场价格、需求量、成本、竞争对手价格等。
这些数据可以通过市场调查、政府报告、行业协会等途径获取。
在收集到数据后,我们需要进行清洗和整理,确保数据的准确性和完整性。
2.需求预测需求预测是定价和补货决策的基础。
通过分析历史销售数据,我们可以预测未来的市场需求。
常用的需求预测方法包括时间序列分析、回归分析等。
通过预测未来一段时间内的需求量,我们可以更好地制定定价和补货策略。
3.成本分析成本是定价的重要因素之一。
我们需要分析蔬菜类商品的成本结构,包括种植、采摘、运输、储存等环节的成本。
通过成本分析,我们可以了解商品的盈亏平衡点,为定价提供依据。
4.定价策略在综合考虑需求和成本后,我们可以制定定价策略。
常见的定价策略包括成本加成定价、竞争导向定价等。
在制定定价策略时,我们需要考虑市场需求、竞争对手价格、商品特点等因素。
5.补货计划补货计划是根据需求预测和库存情况制定的采购计划。
我们需要根据市场需求和库存情况确定最佳补货时间点和补货量。
常用的补货计划方法包括实时库存监控和定期补货计划等。
通过制定合理的补货计划,我们可以确保库存充足,满足市场需求。
蔬菜运输问题摘要本文运用floyd算法求出各蔬菜采购点到每个菜市场的最短运输距离,然后用lingo软件计算蔬菜调运费用及预期短缺损失最小的调运方案,紧接着根据题目要求对算法加以修改得出每个市场短缺率都小于20%的最优调运方案,并求出了最佳的供应改进方案。
求解各采购点到菜市场的最短距离,在图论里面关于最短路问题比较常用的是Dijkstra算法,Dijkstra算法提供了从网络图中某一点到其他点的最短距离。
关键词最短路问题floyd算法运输问题一、问题重述F市是一个人口不到15万人的小城市。
根据该市的蔬菜种植情况,分别在花市(A),城乡路口(B)和下塘街(C)设三个收购点,再由各收购点分送到全市的8个菜市场,该市道路情况,各路段距离(单位:100m)及各收购点,菜市场①⑧的具体位置见图1,按常年情况,A,B,C三个收购点每天收购量分别为200,170和160(单位:100 kg),各菜市场的每天需求量及发生供应短缺时带来的损失(元/100kg)见表 1.设从收购点至各菜市场蔬菜调运费为1元/(100kg.100m).①7 ②5 4 8 3 7A 7 ⑼ 6 B⑥ 6 8 55 4 7 117 ⑾ 4 ③7 5 66 ⑤ 3 ⑿ 5 ④⑽8 6 610 C 10 ⑧5 11⑦图1(a)为该市设计一个从收购点至个菜市场的定点供应方案,使用于蔬菜调运及预期的短缺损失为最小;(b)若规定各菜市场短缺量一律不超过需求量的20%,重新设计定点供应方案(c)为满足城市居民的蔬菜供应,光明市的领导规划增加蔬菜种植面积,试问增产的蔬菜每天应分别向A,B,C三个采购点供应多少最经济合理。
二、问题分析求总的运费最低,可以先求出各采购点到菜市场的最小运费,由于单位重量运费与距离成正比,题目所给的图1里包含了部分菜市场、中转点以及收购点之间的距离,(a)题可以用求最短路的方法求出各采购点到菜市场的最短路径,乘上单位重量单位距离费用就是单位重量各运输线路的费用,然后用线性方法即可解得相应的最小调运费用及预期短缺损失。
第二问规定各菜市场短缺量一律不超过需求量的20%,只需要在上题基础上加上新的限制条件,即可得出新的调运方案。
第三问可以在第二问的基础上用灵敏度分析进行求解,也可以建立新的线性问题进行求解。
三、模型假设1、各个菜市场、中转点以及收购点都可以作为中转点;2、各个菜市场、中转点以及收购点都可以的最大容纳量为610吨;3、假设只考虑运输费用和短缺费用,不考虑装卸等其它费用;4、假设运输的蔬菜路途中没有损耗;5、忽略从种菜场地到收购点的运输费用。
四、符号说明A收购点分送到全市的8个菜市场的供应量分别为a1,b1,c1,d1,e1,f1,g1,h1, B收购点分送到全市的8个菜市场的供应量分别为a2,b2,c2,d2,e2,f2,g2,h2, C收购点分送到全市的8个菜市场的供应量分别为a3,b3,c3,d3,e3,f3,g3,h3, 8个菜市场的短缺损失量分别为a,b,c,d,e,f,g,h(单位均为100kg)。
五、模型的建立与求解按照问题的分析,首先就要求解各采购点到菜市场的最短距离,在图论里面关于最短路问题比较常用的是Dijkstra算法,Dijkstra算法提供了从网络图中某一点到其他点的最短距离。
主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。
但由于它遍历计算的节点很多,所以效率较低,实际问题中往往要求网络中任意两点之间的最短路距离。
如果仍然采用Dijkstra算法对各点分别计算,就显得很麻烦。
所以就可以使用网络各点之间的矩阵计算法,即Floyd算法。
Floyd算法的基本是:从任意节点i到任意节点j的最短路径不外乎2种可能,1是直接从i到j,2是从i经过若干个节点k到j。
i到j的最短距离不外乎存在经过i与j之间的k和不经过k两种可能,所以可以令k=1,2,3,...,n(n是城市的数目),在检查d(i,j)与d(i,k)+d(k,j)的值;在此d(i,k)与d(k,j)分别是目前为止所知道的i到k与k到j的最短距离。
因此d(i,k)+d(k,j)就是i到j经过k的最短距离。
所以,若有d(i,j)>d(i,k)+d(k,j),就表示从i出发经过k再到j的距离要比原来的i到j距离短,自然把i到j的d(i,j)重写为d(i,k)+d(k,j),每当一个k查完了,d(i,j)就是目前的i到j的最短距离。
重复这一过程,最后当查完所有的k时,d(i,j)里面存放的就是i到j之间的最短距离了。
对于上面的问题,只要能列出它的距离的邻接矩阵,如表2所示。
便能用floyd法进行计算了。
表2 各点的邻接矩阵图首先对图1中的4个纯中转点进行编号,为(9)~(12),并标注在图1中,A、B、C的编号分别为1、14、15,其余点在矩阵中的编号如表1第一行所示。
由于数据比较复杂,用普通的计算很困难,所以我们可以用MATLAB软件来编程求解。
算法思路:采用标号作业法,每次迭代产生一个永久标号, 从而生长一颗以V0为根的最短路树,在这颗树上每个顶点与根节点之间的路径皆为最短路径。
当然此问题也需要表2的各点邻接矩阵。
M程序如下:function [min,path]=dijkstra(w,start,terminal)n=size(w,1); label(start)=0; f(start)=start;for i=1:nif i~=startlabel(i)=inf;end, ends(1)=start; u=start;while length(s)<nfor i=1:nins=0;for j=1:length(s)if i==s(j)ins=1;end, endif ins==0v=i;if label(v)>(label(u)+w(u,v))label(v)=(label(u)+w(u,v)); f(v)=u;end, end, endv1=0;k=inf;for i=1:nins=0;for j=1:length(s)if i==s(j)ins=1;end, endif ins==0v=i;if k>label(v)k=label(v); v1=v;end, end, ends(length(s)+1)=v1;u=v1;endmin=label(terminal); path(1)=terminal;i=1;while path(i)~=startpath(i+1)=f(path(i));i=i+1 ;endpath(i)=start;L=length(path);path=path(L:-1:1);图2 Dijkstra算法的MATLAB运行图如图2,红色框内的是Dijkstra算法的脚本程序,蓝色框内的试运行结果,根据程序显示s点到j点的最短路就是4百米。
在程序中显示所走的路线为path=1 2,对应点即为直接从A点到达①点。
但是由于运用dijkstra编程每次都要修改起始点和终点,所以在大部分情况下效率都不高。
由于dijkstra算法较为复杂,所以可用Floyd算法用于求最短路径。
Floyd 算法思路本质很简单,即用三个for循环的嵌套,代码思路如下:for ( int i = 0; i < 节点个数; ++i ){for ( int j = 0; j < 节点个数; ++j ){for ( int k = 0; k < 节点个数; ++k ){if ( Dis[i][k] + Dis[k][j] < Dis[i][j] ){// 找到更短路径Dis[i][j] = Dis[i][k] + Dis[k][j];}}}}但是这里我们要注意循环的嵌套顺序,如果把检查所有节点X放在最内层,那么结果将是不正确的,因为这样便过早的把i到j的最短路径确定下来了,所以正确的应该是这样的:for ( k = 0; k < 节点个数; ++k ){for ( i = 0; i < 节点个数; ++i ){for ( j = 0; j < 节点个数; ++j ){if ( Dis[i][k] + Dis[k][j] < Dis[i][j] ){%找到更短路径Dis[i][j] = Dis[i][k] + Dis[k][j];}}}.}那么接下来的问题就是,我们如何找出最短路径.这里需要借助一个辅助数组Path,它是这样使用的:Path(AB)的值如果为P,则表示A节点到B节点的最短路径是A->...->P->B。
这样一来,假设我们要找A->B的最短路径,那么就依次查找,假设Path(AB)的值为P,那么接着查找Path(AP),假设Path(AP)的值为L,那么接着查找Path(AL),假设Path(AL)的值为A,则查找结束,最短路径为A->L->P->B。
那么,如何填充Path的值呢?很简单,当我们发现Dis(AX) + Dis(XB) < Dis(AB)成立时,就要把最短路径改为A->...->X->...->B,而此时,Path(XB)的值是已知的,所以,Path(AB) = Path(XB)。
Floyd算法直接在图的带权邻接矩阵中用插入顶点的方法依次递推地构造出n个矩阵D(1), D(2), …, D(n), D(n)是图的距离矩阵, 同时引入一个后继点矩阵记录两点间的最短路径。
d(i,j) : i到j的距离; path(i,j): i到j的路径上i的后继点;输入带权邻接矩阵a(i,j)。
赋初值,对所有i,j, d(i,j)a(i,j) , path(i,j)j,k=l。
然后更新d(i,j) , path(i,j)对所有i,j,若d(i,k)+d(k,j)<d(i,j)则d(i,j)=d(i,k)+d(k,j) , path(i,j)path(i,k) , k =k+1。
重复上述步骤直到k=n+1。
接下来就是代入具体的数据了,这里的图以及邻接矩阵依旧是修改后的图1及表2。
Floyd算法的MATLAB代码如下:M程序function [D,path,min1,path1]=floyd(a,start,terminal)D=a;n=size(D,1);path=zeros(n,n);for i=1:nfor j=1:nif D(i,j)~=infpath(i,j)=j;end, end, endfor k=1:nfor i=1:nfor j=1:nif D(i,k)+D(k,j)<D(i,j)D(i,j)=D(i,k)+D(k,j);path(i,j)=path(i,k);end, end, end,endif nargin==3min1=D(start,terminal);m(1)=start;i=1;path1=[ ];while path(m(i),terminal)~=terminalk=i+1;m(k)=path(m(i),terminal);i=i+1;endm(i+1)=terminal;path1=m;end脚本程序的代码如下:a=[0 4 8 8 inf inf 6 inf inf 7 inf 4 inf inf inf4 0 7 inf inf inf5 inf inf inf inf inf inf inf inf8 7 0 inf inf inf inf inf inf 3 inf inf inf 7 inf8 inf inf 0 inf 5 inf inf inf 5 inf 4 6 7 infinf inf inf inf 0 inf inf inf inf inf inf inf 5 inf inf inf inf inf 5 inf 0 inf inf inf inf 6 7 3 inf 66 5 inf inf inf inf 0 inf inf inf7 5 inf inf infinf inf inf inf inf inf inf 0 11 inf 10 inf inf inf 5 inf inf inf inf inf inf inf 11 0 inf inf inf 6 inf 10 7 inf 3 5 inf inf inf inf inf 0 inf inf inf 6 infinf inf inf inf inf 6 7 10 inf inf 0 inf inf inf 84 inf inf 4 inf 75 inf inf inf inf 0 inf inf infinf inf inf 6 5 3 inf inf 6 inf inf inf 0 11 inf inf inf 7 7 inf inf inf inf inf 6 inf inf 11 0 inf inf inf inf inf inf 6 inf 5 10 inf 8 inf inf inf 0];[D, path]=floyd(a)运行结果如下:图3 返回矩阵D图4 返回矩阵pathD(i,j)表示i到j的最短距离; path(i,j)表示i与j之间的最短路径上顶点i的后继点。