題目:
實現單源最短路經的迪傑斯特拉演算法(dijkstra),以下圖為例,求出1到其餘地點的最短路徑。
基本思想:
以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。
code:
clc輸出結果clear
%作出鄰接矩陣
a=zeros(7
);a(
1,2)=10;a(1,3)=15;a(1,4)=30;a(
2,5)=45;a(2,7)=60;a(
3,4)=10;a(3,6)=25;a(
4,6)=20;a(4,7)=23;a(
5,7)=29;a(
6,7)=11
;a=a+a'
% 將a=0的數替換為∞
a(find(a==0))=inf
%當乙個點已經求出到原點的最短距離時,其下標i對應的pb(i)賦1
pb(1:length(a))=0
;pb(
1)=1
;%存放存入s集合的順序
index1=1
; %存放起點到第i點最短通路中第i頂點前一頂點的序號
index2=ones(1
,length(a));
%d存放由始點到第i點最短通路的值
d(1:length(a))=inf;
d(1)=0
; %temp表示c1,算c1到其它點的最短路。
temp=1
; %看是否所有的點都標記為p標號
while sum(pb)
%找到標號為0的所有點,即找到還沒有存入s的點
tb=find(pb==0
); %計算標號為0的點的最短路,或者是從原點直接到這個點,又或者是原點經過r1,間接到達這個點
d(tb)=min(d(tb),d(temp)+a(temp,tb));
%求d[tb]序列最小值的下標
tmpb=find(d(tb)==min(d(tb)));
%可能有多條路徑同時到達最小值,卻其中乙個,temp也從原點變為下乙個點
temp=tb(tmpb(1
));% 找到最小路徑的表對應的pb(i)=1
pb(temp)=1
;%存放存入s集合的順序
index1=[index1,temp];
temp2=find(d(index1)==d(temp)-a(temp,index1));
%記錄標號索引
index2(temp)=index1(temp2(1
));
endd, index1, index2
0 10 15 25 55 40 48 為到各點的最短距離
最短路徑演算法 最短路
在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...
最短路徑演算法
floyd演算法 012345 001 54 1108 1 2 801 3 3 1035 45 302 5413520 floyd 演算法過程描述如下 首先 以邊集 初始化,得到所有的直接連通代價 依次考慮第 k個結點,對於 中的每乙個 i j 判斷是否滿足 s i j s i k s k j 如果...
最短路徑演算法
個人覺得下面 有代表性 最短路徑演算法原始碼 vb 本人載 開發gis,遊自編的最短路徑查詢程式,速度特快,3萬節點,35000條路全部遍歷,只需1秒。現將最短路徑的思路告訴大家,希望大家在優化,並用不同語言編制,我正在學delphi,準備用delphi做成庫,本例以由拓撲關係的arc info 檔...