基於Dijsktra演算法的最短路徑求解

2021-08-10 10:02:57 字數 1684 閱讀 4432

描述

一張地圖包括

n個城市,假設城市間有

m條路徑(有向圖),每條路徑的長度已知。給定地圖的乙個起點城市和終點城市,利用

dijsktra

演算法求出起點到終點之間的最短路徑。

輸入多組資料,每組資料有m+3行。第一行為兩個整數n和m,分別代表城市個數n和路徑條數m。第二行有n個字元,代表每個城市的名字。第三行到第m+2行每行有兩個字元a和b和乙個整數d,代表從城市a到城市b有一條距離為d的路。最後一行為兩個字元,代表待求最短路徑的城市起點和終點。當n和m都等於0時,輸入結束。

輸出每組資料輸出兩行。第一行為乙個整數,為從起點到終點之間最短路的長度。第二行為一串字串,代表該路徑。每兩個字元之間用空格隔開。

樣例輸入1

複製

3 3

a b c

a b 1

b c 1

c a 3

a c6 8

a b c d e f

a f 100

a e 30

a c 10

b c 5

c d 50

d e 20

e f 60

d f 10

a f0 0

樣例輸出1

2

a b c

60a e d f

迪傑斯特拉演算法模板題

c++**如下:

#include#include#include#include#includeusing namespace std;

const int nnn = 9999999;

int road[300][300];

int dis[300];

int vis[300];

int n, m;

int d[300];

struct node

node[6000];

void dis(int x)

for (j = 0; j < n+7; j++)

}vis[v] = 1;

ans = nnn;

for (i = 0; i < n; i++)

} }}

void print(int n)

print(d[n]);

cout <<" "<< node[n].ch ;

return;

}int main()

cin >> m;

if (n == 0 && m == 0)

break;

for (i = 0; i < n; i++)

for (i = 0; i < m; i++)

cin >> road[a][b];

road[b][a] = road[a][b];

} cin >> ch1 >> ch2;

for (j = 0; j < n; j++)

for (j = 0; j < n; j++)

dis(x);

if (dis[y] < nnn)

cout << dis[y] << endl;

else

cout << "-1\n";

print(y);

cout << endl;

} return 0;

}

基於Dijsktra演算法的最短路徑求解

基於dijsktra演算法的最短路徑求解 描述一張地圖包括n個城市,假設城市間有m條路徑 有向圖 每條路徑的長度已知。給定地圖的乙個起點城市和終點城市,利用dijsktra演算法求出起點到終點之間的最短路徑。輸入多組資料,每組資料有m 3行。第一行為兩個整數n和m,分別代表城市個數n和路徑條數m。第...

複習之路 最短路演算法Dijsktra

dijkstra spfa floyd dijkstra演算法是一種單源最短路演算法,適用於無負權的圖。其採用了bfs 貪心的方式來更新最短路。初始化dis 每乙個點 dis 起點 0。標記起點,加入集合s。其他點不標記,加入集合u。從集合u中選取與當前點a距離最近的點b。若起點到點a的距離 點a到...

最短路徑(Dijsktra演算法 Floyd演算法)

1 最短路徑 兩個結點之間,帶權路徑長度最短的路徑。常用演算法是dijkstra演算法和floyd演算法,區別在於dijsktra演算法每次只能算出某乙個結點到其他結點的最短路徑,而floyd演算法可以直接把圖中任意兩個結點的最短路徑都算出來。最短路徑一定是簡單路徑。2 dijkstra 迪傑斯特拉...