最短路徑Dijkstra演算法原理及Matlab實現

2021-08-25 05:15:14 字數 2281 閱讀 4491

圖論的基礎知識不再闡述。

最短路徑演算法主要有二

dijkstra演算法

floyd演算法

dijkstra演算法研究的是從初始點到其他每一結點的最短路徑

而floyd演算法研究的是任意兩結點之間的最短路徑

以下圖為例,首先介紹dijstra的原理

紅字為各結點的編號,藍字為各結點之間的距離

首先定義幾個變數

結點個數n;

二維矩陣m(nxn),距離矩陣,連通的結點間即為距離,不連通的結點間為正無窮,和自己的距離為0;

一維矩陣pb(1xn),若第i點已找到最短路徑,則fp(i)=1,否則等於0,對於初始結點,fp=1;

距離矩陣d(1xn),若第i點已找到最短路徑,則的d(i)=最短距離,否則為0,初始結點d=0;

上一結點矩陣path(1xn),若第i點找到了最短路徑,則path存放這一條最短路徑的前乙個結點,通過對每一點的回溯,可以找到最短路徑。

根據距離寫出以下距離矩陣

確定初始點為v1,則pb(1)=1;

在圖中,結點上,我們將已找到最短路徑的點標為它的最短距離,(可以理解為v1點已找到最短路徑,距離為0),未找到的其餘點表為正無窮(即表示不連通)。

在與v1連通的點中,即在矩陣m的第1行,尋找最小值,最小值所在列即確定的最短路徑的結點,如同v2最短,pb(2)=1,d(2)=1,對於已找到最短路徑的v2上一結點為v1,path(2)=1;

接著,在

以上兩種中尋找最短距離,最短為v6,pb(6)=1;d(6)=2;path(6)=1;

重複以上步驟,在

附上**:

clc;clear;

n=6; %設定矩陣大小

temp=1; %設定起始點

m=zeros(6);%定義n階零矩陣

m(1,2)=1;m(1,6)=2;%設定矩陣中非零非無窮的值

m(2,1)=1;m(2,3)=4;m(2,6)=4;

m(3,2)=4;m(3,4)=2;m(3,6)=1;

m(4,3)=2;m(4,5)=3;m(4,6)=3;

m(5,4)=3,m(5,6)=5;

m(6,1)=2;m(6,2)=4;m(6,3)=1;m(6,4)=3;m(6,5)=5;

fori=1:n

forj=1:n

if(m(i,j)==0)

m(i,j)=inf;

endendend

fori=1:n

m(i,i)=0;

endpb(1:length(m))=0;pb(temp)=1;%求出最短路徑的點為1,未求出的為0

d(1:length(m))=0;%存放各點的最短距離

path(1:length(m))=0;%存放各點最短路徑的上一點標號

while sum(pb)%判斷每一點是否都已找到最短路徑

tb=find(pb==0);%找到還未找到最短路徑的點

fb=find(pb);%找出已找到最短路徑的點

min=inf;

fori=1:length(fb)

forj=1:length(tb)

plus=d(fb(i))+m(fb(i),tb(j)); %比較已確定的點與其相鄰未確定點的距離

if((d(fb(i))+m(fb(i),tb(j)))i))+m(fb(i),tb(j));

lastpoint=fb(i);

newpoint=tb(j);

endendend

d(newpoint)=min;

pb(newpoint)=1;

path(newpoint)=lastpoint; %最小值時的與之連線點

endd

path

路徑只需向上回溯就可得到。

Dijkstra最短路徑演算法

基本思路是 選擇出發點相鄰的所有節點中,權最小的乙個,將它的路徑設定為確定。其他節點的路徑需要儲存起來。然後從剛剛確認的那個節點的相鄰節點,算得那些節點的路徑長。然後從所有未確定的節點中選擇乙個路徑最短的設定為確定。重複上面步驟即可。void dijkstra graph g,string v fl...

Dijkstra最短路徑演算法

引入 dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。package dijkstra p...

最短路徑 Dijkstra演算法

最短路徑 描述 已知乙個城市的交通路線,經常要求從某一點出發到各地方的最短路徑。例如有如下交通圖 則從a出發到各點的最短路徑分別為 b 0c 10 d 50 e 30 f 60 輸入 輸入只有乙個用例,第一行包括若干個字元,分別表示各頂點的名稱,接下來是乙個非負的整數方陣,方陣維數等於頂點數,其中0...