描述
一張地圖包括
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
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
2a 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 迪傑斯特拉...