一:簡介
這個演算法用於解決圖中單源最短路徑問題。所謂單源節點是指給定源節點,求圖中其它節點到此源節點的最短路徑。如下圖所示:給定源節點a,求節點b到a的最短距離。
這裡寫描述
演算法**
#pragma once
#include
#include
#include
#include
using namespace
std;
class
info;}
;class
graph
return
false;}
public
:graph
(int n,bool t=
false
)//初始化圖的邊數和圖的型別
void inputedge
(string vex1,string vex2,int dis)
else
//儲存無向圖的邊}
bool dijkstra
(string start)
} string midvex= itertmp-
>
first
; arri.
erase
(itertmp)
;//cout << midvex << " " << min<< endl;
if(edge.
find
(midvex)
!= edge.
end())
//判斷是否存在路徑與權值最小的路徑相連}}
}}return flag;
} void printminpath
(string start)
}else}}
void printminpath
(string start,string end)
else
}else}}
};
**測試****
#include"graph.h"
#include"windows.h"
int main()
while(1
) g.
printminpath
(begin);}
while(1
) g.
printminpath
(begin,end);}
system
("pause");
return0;
}
**測試資料**
22a b 12
b c 2
c f 3
f i 1
h i 8
g h 5
g d 1
a d 3
a e 1
b e 1
c e 6
f e 10
i e 11
h e 2
g e 3
d e 7
g j 2
h j 5
i j 3
k l 3
k a 4
l d 5
**測試結果**
請輸入起點:
aa到a的最短路徑為:a,最短距離為:0
a到b的最短路徑為:a->e->b,最短距離為:2
a到c的最短路徑為:a->e->b->c,最短距離為:4
a到d的最短路徑為:a->d,最短距離為:3
a到e的最短路徑為:a->e,最短距離為:1
a到f的最短路徑為:a->e->b->c->f,最短距離為:7
a到g的最短路徑為:a->e->g,最短距離為:4
a到h的最短路徑為:a->e->h,最短距離為:3
a到i的最短路徑為:a->e->b->c->f->i,最短距離為:8
a到j的最短路徑為:a->e->g->j,最短距離為:6
a到k的最短路徑為:a->k,最短距離為:4
a到l的最短路徑為:a->k->l,最短距離為:7
請輸入起點:
bb到a的最短路徑為:b->e->a,最短距離為:2
b到b的最短路徑為:b,最短距離為:0
b到c的最短路徑為:b->c,最短距離為:2
b到d的最短路徑為:b->e->a->d,最短距離為:5
b到e的最短路徑為:b->e,最短距離為:1
b到f的最短路徑為:b->c->f,最短距離為:5
b到g的最短路徑為:b->e->g,最短距離為:4
b到h的最短路徑為:b->e->h,最短距離為:3
b到i的最短路徑為:b->c->f->i,最短距離為:6
b到j的最短路徑為:b->e->g->j,最短距離為:6
b到k的最短路徑為:b->e->a->k,最短距離為:6
b到l的最短路徑為:b->e->a->k->l,最短距離為:9
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...