基於dijsktra演算法的最短路徑求解
描述一張地圖包括n個城市,假設城市間有m條路徑(有向圖),每條路徑的長度已知。給定地圖的乙個起點城市和終點城市,利用dijsktra演算法求出起點到終點之間的最短路徑。
輸入多組資料,每組資料有m+3行。第一行為兩個整數n和m,分別代表城市個數n和路徑條數m。第二行有n個字元,代表每個城市的名字。第三行到第m+2行每行有兩個字元a和b和乙個整數d,代表從城市a到城市b有一條距離為d的路。最後一行為兩個字元,代表待求最短路徑的城市起點和終點。當n和m都等於0時,輸入結束。
輸出每組資料輸出兩行。第一行為乙個整數,為從起點到終點之間最短路的長度。第二行為一串字串,代表該路徑。每兩個字元之間用空格隔開。
輸入樣例 1
3 3a b c
a b 1
b c 1
a c 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
e d 20
e f 60
d f 10
a f0 0
輸出樣例 1
2a b c
60a e d f
#include#include#include
#define maxint 32767
#define mvnum 100//
最大頂點數
/*注意是有向圖,用鄰接矩陣
*/int d[mvnum];//
起點開始到各個點的距離
int s[mvnum];//
是否訪問過
intpath[mvnum];
using
namespace
std;
typedef
struct
amgraph;
int locate(amgraph &g,char s)//
返回編號
}void creat(amgraph &g)
for(int i=0;i<=g.arcnum;i++)
for (int j = 0; j <= g.arcnum; j++)
for (int i = 0; i < g.arcnum; i++)
}void dijkstra(amgraph &g,int
v0)
s[v0] = 1
; d[v0] = 0
;
for (int i = 0; i < n - 1; i++)
}s[v] = 1
;
for (int w = 1; w <= n; w++)}}
}void print(amgraph &g,int s,int
e)
for (int j = i - 1; j > 0; j--)
cout
<< g.vexs[r[j]] << "";
cout
<< g.vexs[r[0]] <}int
main()
return0;
}
基於Dijsktra演算法的最短路徑求解
描述 一張地圖包括 n個城市,假設城市間有 m條路徑 有向圖 每條路徑的長度已知。給定地圖的乙個起點城市和終點城市,利用 dijsktra 演算法求出起點到終點之間的最短路徑。輸入多組資料,每組資料有m 3行。第一行為兩個整數n和m,分別代表城市個數n和路徑條數m。第二行有n個字元,代表每個城市的名...
複習之路 最短路演算法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 迪傑斯特拉...