最短路徑演算法 2019 5 25

2022-02-18 10:19:38 字數 1545 閱讀 3875

題目:

實現單源最短路經的迪傑斯特拉演算法(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 檔...