接着我们以XX地区为例来进行最短路程求解根据上面我们得出的某一区域中的数个卸货点卸货点的位置坐标,我们假定实际的卸货点位于距离理想卸货点最近的公路节点。(具体代码见附录)由此可得到每个实际卸货点以及附近的道路信息如图:R=[472471827467134473458]R(i)表示实际卸货点为L中的第R(i)个道路节点求解卸货点间的最短路径,首先我们需要得到记录连接节点的道路权值的邻接矩阵A。由于该区域内公路节点繁多,道路连接复杂。我们首先给出该区域内所有公路节点的经纬度矩阵L,L(i,1)表示第i个节点经度,L(i,1)表示第i个节点纬度;公路信息矩阵X,X(i,1)表示第i条公路节点1经度,X(i,2)表示纬度,X(i,3)表示节点2经度,X(i,4)表示节点3纬度,X(i,5)表示公路权值,近似等于两节点距离。对于每个节点,在区域内节点并不多且经度有效数字足够多的情况下,我们认为经度与节点一一对应,即可用该节点经度检索此节点。确定A(i,j)权值时,先由L(i,:)确定节点i经纬度,筛选出X中节点1经纬度相等的行,再由L(j,:)确定节点j经纬度,从前面筛选出的行中再筛选出连接两节点的道路,令A(i,j)等于其距离。由于可能存在j为节点1,i为节点2的情况,将i,j调换,重复上述步骤。最后将未找到符合道路的A(i,j)置为∞,A(i,i)置为0,得到最终结果,具体代码见附录。A的部分数值如图---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---其中表示无道路直接相连。计算卸货点间的最短距离,我们最初采用狄克斯特拉算法,但发现必须对数百个公路节点由起始点开始由近及远进行排序,无法计算出结果。于是我们改用弗洛伊德算法。弗洛伊德算法又称为插点法,是一种用于寻找给定的加权图中多源点之间最短路径的算法。我们先选定一节点k,然后寻找与k直接相连的节点i,j,若D(i,j)>A(i,k)+A(k,j),则令D(i,j)=A(i,k)+A(k,j)。如此往复,k、i、j均由1到n遍历一遍,得到任意两节点间的最短路径矩阵D。D的部分数值如图接着我们通过卸货点标号向量R从D中筛选出我们需要的卸货点间最短路径矩阵d---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---确定货车前往各个卸货点并返回的最短路径显然,货车需要从起点出发经过且只经过一次各个卸货点并返回,构成一个回路,求解它的最短路径。我们采用最短哈密顿回路方法。哈密顿图是一个无向图,由指定的起点前往指定的终点,途中经过所有其他节点且只经过一次。在图论中是指含有哈密顿回路的图,闭合的哈密顿路径称作哈密顿回路。通过哈密顿回路来求解回路最短路的方法称为最短哈密顿回路法。任取初始回路C=[12345…n1],对所有1<i+1<j<n,若w(i,j)+w(i+1,j+1)<w(i,j+1)+W(j,j+1),其中w(i,j)表示i点与j点间的距离,则在1C中删去边(i,i+1)和(j,j+1)而插入新边(i,j)和(i+1,j+1),形成新的哈密顿圈,即C=[12…ij…i+1j+1…n1],对C重复这一步骤,直到条件不满足为止,由此可以求出往复一周的最段路径(具体代码见附录)。各卸货点按在d中的顺序标记为1-7,选定初始回路C=[12345671],经过计算,最短回路为C=[15742631],最短路径sum=31.6580。改变初始点,重复七次可得到最短路径C=[65127436],sum(min)=17.7410。根据以上方法,便可得出所有分区的最短路径。附录:Matlab代码---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---%A(i,j)表示i节点到j节点的道路距离,表示两点不直接连接%L为分区内所有节点坐标%X为所有道路信息%求解邻接矩阵AA=[];n=length(L(:,1));m=length(X(:,1));fori=1:nforj=i+1:np=[];fork=1:mifX(k,1)==L(i,1)p=[pk];end;end;fork=1:length(p)ifX(p(k),3)==L(j,1)A(j,i)=X(p(k),5);A(i,j)=X(p(k),5);end;end;p=[];fork=1:mifX(k,3)==L(i,1)p=[pk];end;end;fork=1:length(p)ifX(p(k),1)==L(j,1)A(j,i)=X(p(k),5);A(i,j)=X(p(k),5);end;end;end;end;fori=1:nforj=1:nifi~=jA(i,j)==0A(i,j)=;end;---本文来源于网络,仅供参考,勿照抄,如有侵权请联系删除---end;end;%S理想卸货点坐标%R中存放实际卸货点标号min=;m=length(S(:,1));R=1:1:m;fori=1:mforj=...