D_i_j_k_s_t_r_a最短路算法MATLAB程序_

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

从起点sb到终点db通用的Dijkstra标号算法程序

function [mydistance,mypath]=mydijkstra(a,sb,db);

% 输入:a—邻接矩阵,a(i,j)是指i到j之间的距离,可以是有向的% sb—起点的标号, db—终点的标号

% 输出:mydistance—最短路的距离, mypath—最短路的路径

n=size(a,1); visited(1:n) = 0;

distance(1:n) = inf; distance(sb) = 0; %起点到各顶点距离的初始化visited(sb)=1; u=sb; %u为最新的P标号顶点

parent(1:n) = 0; %前驱顶点的初始化

for i = 1: n-1

id=find(visited==0); %查找未标号的顶点

for v = id

if a(u, v) + distance(u) < distance(v)

distance(v) = distance(u) + a(u, v); %修改标号值

parent(v) = u;

end

end

temp=distance;

temp(visited==1)=inf; %已标号点的距离换成无穷

[t, u] = min(temp); %找标号值最小的顶点

visited(u) = 1; %标记已经标号的顶点

end

mypath = [];

if parent(db) ~= 0 %如果存在路!

t = db; mypath = [db];

while t ~= sb %从终点db开始回溯

p = parent(t);

mypath = [p mypath];

t = p;

end

end

mydistance = distance(db);

例题:运筹学教材P205 第七题

D=[0 3 6 1 inf inf inf inf;

inf 0 2 inf 4 6 inf inf;

inf inf 0 inf inf 5 inf inf;

inf inf 4 0 inf 3 6 inf;

inf inf inf inf 0 inf inf 7;

inf inf inf inf inf 0 7 11;

inf inf inf inf inf inf 0 8;

inf inf inf inf inf inf inf 0]

在command window输入:[mydistance,mypath]=mydijkstra(D,1,8);

相关文档
最新文档