码迷,mamicode.com
首页 > 其他好文 > 详细

图论之最短路02-2——改进的任意两点间最短距离及路径

时间:2015-08-21 13:40:13      阅读:119      评论:0      收藏:0      [点我收藏+]

标签:图论   任意两点最短路径及距离   最短路算法   路径问题   

========================================================
重要程度 *****
求任意两点间最短距离及其路径。(万能最短路)
输入:权值矩阵,起点,终点
输出:最短距离矩阵,指定起讫点路径(经过的顶点编号)
========================================================
function renyizuiduanlu(W)
clc
disp(‘                           最短路问题‘);
disp(‘===========================================================‘);
disp(‘  说明:本程序用于求任意两点间最短距离及其路径‘);
disp(‘  输入3组数据:权值矩阵,起点,终点.其中权值矩阵需提前编辑完成‘);
disp(‘===========================================================‘);
W
qidian=input(‘输入起点:‘);
zhongdian=input(‘输入终点:‘);
n=length(W);
D=W;
m=1;
while m<=n
    for i=1:n
        for j=1:n
            if D(i,j)>D(i,m)+D(m,j)
                D(i,j)=D(i,m)+D(m,j);
            end
        end
    end
    m=m+1;
end
d=D(qidian,zhongdian);
P1=zeros(1,n);
k=1;
P1(k)=zhongdian;
V=ones(1,n)*inf;
kk=zhongdian;
while kk~=qidian;
    for i=1:n
        V(1,i)=D(qidian,kk)-W(i,kk);
        if V(1,i)==D(qidian,i)
            P1(k+1)=i;
            kk=i;
            k=k+1;
        end
    end
end
k=1;
wrow=find(P1~=0);
for j=length(wrow):(-1):1
    P(k)=P1(wrow(j));
    k=k+1;
end
P
d
%========================================================
%评:改进后可以任意定义并从界面输入起讫点,更加符合实际需要。

%========================================================

例:求下图中点1到8的最短距离和路径。

技术分享

解:(1)写权值矩阵

quanzhijuzhen=[ 0     2     8     1   Inf   Inf   Inf   Inf
     2     0     6   Inf     1   Inf   Inf   Inf
     8     6     0     7     5     1     2   Inf
     1   Inf     7     0   Inf   Inf     9   Inf
   Inf     1     5   Inf     0     3   Inf     8
   Inf   Inf     1   Inf     3     0     4     6
   Inf   Inf     2     9   Inf     4     0     3
   Inf   Inf   Inf   Inf     8     6     3     0]

(2)带入程序

renyizuiduanlu(quanzhijuzhen)

                                                               最短路问题
===========================================================
  说明:本程序用于求任意两点间最短距离及其路径
  输入3组数据:权值矩阵,起点,终点.其中权值矩阵需提前编辑完成
===========================================================


W =


     0     2     8     1   Inf   Inf   Inf   Inf
     2     0     6   Inf     1   Inf   Inf   Inf
     8     6     0     7     5     1     2   Inf
     1   Inf     7     0   Inf   Inf     9   Inf
   Inf     1     5   Inf     0     3   Inf     8
   Inf   Inf     1   Inf     3     0     4     6
   Inf   Inf     2     9   Inf     4     0     3
   Inf   Inf   Inf   Inf     8     6     3     0


输入起点:1
输入终点:8


P =


     1     2     5     8




d =


    11

说明:最短路径为1->2->5->8,最短距离11.

版权声明:博主文章可以被非商用转载,但请务必注明出处,因水平有限,难免出错,在此免责。

图论之最短路02-2——改进的任意两点间最短距离及路径

标签:图论   任意两点最短路径及距离   最短路算法   路径问题   

原文地址:http://blog.csdn.net/lzx19901012/article/details/47832483

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!