資源簡介
對于K最短路問題,首先找出兩點之間的所有路徑,然后利用K最短路算法,將最短路、次短路、第三最短路等計算出來,存入數組中。該matlab程序具有很好的通用性,希望對大家有用。
說明:findpath.m文件可計算出任意兩點的所有路徑,dijstra.m可算出兩點間的最短路,main.m為K最短路算法,文件夾中附有一張計算結果圖!

代碼片段和文件信息
function?[minpath]=dijkstra(wstartterminal)
n=size(w1);?label(start)=0;?f(start)=start;
for?i=1:n
???if?i~=start
???????label(i)=inf;
???end
end
s(1)=start;?u=start;
while?length(s) ???for?i=1:n
??????ins=0;
??????for?j=1:length(s)
?????????if?i==s(j)
????????????ins=1;
?????????end
??????end
??????if?ins==0
?????????v=i;
?????????if??label(v)>(label(u)+w(uv))
????????????label(v)=(label(u)+w(uv));?f(v)=u;
?????????end
??????end
???end
???v1=0;
???k=inf;
???for?i=1:n
?????????ins=0;
?????????for?j=1:length(s)
????????????if?i==s(j)
???????????????ins=1;
????????????end
?????????end
?????????if?ins==0
????????????v=i;
????????????if?k>label(v)
???????????????k=label(v);??v1=v;
????????????end
?????????end
???end
???s(length(s)+1)=v1;??
???u=v1;
end
min=label(terminal);?path(1)=terminal;
i=1;?
while?path(i)~=start
??????path(i+1)=f(path(i));
??????i=i+1?;
end
?path(i)=start;
L=length(path);
path=path(L:-1:1);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????2020??2016-05-26?11:35??k最短路程序\main.m
?????文件?????????982??2016-05-24?10:22??k最短路程序\dijkstra.m
?????文件????????1854??2016-05-20?19:27??k最短路程序\findPath.m
?????文件???????14350??2016-05-25?15:34??k最短路程序\計算結果.png
?????目錄???????????0??2016-05-26?11:23??k最短路程序\
評論
共有 條評論