最短路径的四种解法
在学习“图”的时候,遇到过一道经典的题:最短路径。最短路径有四种最经典的解法。废话不多说,直接上代码。
弗洛伊德算法
//Floyd-Warshall
#include<iostream>
using namespace std;
const int M=999999;
int n,m,p1,p2,l;
int map[1000][1000];
int main()
{
cin>>n>>m;
for (int i=1;i<=n;i++)
{
for (int j=1;j<=n;j++)
{
if (i==j)
{
map[i][j]=0;
}
else
{
map[i][j]=M;
}
}
}
for (int i=1;i<=m;i++)
{
cin>>p1>>p2>>l;
map[p1][p2]=l;
}
for (int k = 1; k <= n; k++) {
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= n; j++) {
if (map[i][j] > map[i][k] + map[k][j]) {
map[i][j] = map[i][k] + map[k][j];
}
}
}
}
for (int i=1;i<=n;i++