码迷,mamicode.com
首页 > 编程语言 > 详细

图论之最短路04-1——经典Dijkstra算法

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

标签:图论   最短路算法   路径问题   经典dijkstra算法   

========================================================
经典dijkstra算法,已知顶点,求其到其他各个点的最短距离和路径。
========================================================


function [d index1 index2]=Dijkstra(W)

%d-最短距离,index1-路径排序(升),index2-指向来源(上一个点,递归可得路径)
M=max(max(W));
pb(1:length(W))=0;
pb(1)=1;
index1=1;
index2=ones(1,length(W));
d(1:length(W))=M;
d(1)=0;
temp=1;
while sum(pb)<length(W)
    tb=find(pb==0);
    d(tb)=min(d(tb),d(temp)+W(temp,tb));
    tmpb=find(d(tb)==min(d(tb)));
    temp=tb(tmpb(1));
    pb(temp)=1;
    index1=[index1,temp];
    index=index1(find(d(index1)==d(temp)-W(temp,index1)));
    if length(index)>=2
        index=index(1);
    end
    index2(temp)=index;
end
d;
index1;
index2;
========================================================
评:只给出了顶点到其他点的最短距离,路径解不彻底,不能直观表达路径。
========================================================

例:求下图中顶点1到其它点的最短距离。

技术分享

解:

(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)带入程序(格式整理后输出如下)

>> [d index1 index2]=Dijkstra(quanzhijuzhen)

d =
     0     2     7     1     3     6     9    11

index1 =
     1     4     2     5     6     3     7     8

index2 =
     1     1     6     1     2     5     3     5

说明:

d——顶点1到点1-8的最短距离分别为0     2     7     1     3     6     9    11;

index1——到其他点的距离排序,即1最近(0),4次之(1),后依次为2(2),5(3),6(6),3(7),7(9),8(11);

index2——各点的上游编号,例如到点5的路径可这样推算:index2(5)=2,index2(2)=1(已经到顶点,结束),则路径为1—>2—>5.




        

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

图论之最短路04-1——经典Dijkstra算法

标签:图论   最短路算法   路径问题   经典dijkstra算法   

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

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