弗洛伊德算法求最短路径–dp
#include<iostream>
#include<cstring>
using namespace std;
const int inf=0x3f3f3f3f;
int d[100][100];
int main(){
int n,m,k,e;
cin >> n >> e;
cin >> m >> k;
memset(d,inf,sizeof(d));
for(int i=0;i<e;i++){
int a,b,c;
cin >> a >> b >> c;
d[i][i]=0;
d[a][b]=c;
d[b][a]=c;
}
//从 i 点由 k 点到 j 点
//选取最短路
for(int k=0;k<n;k++){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
d[i][j]=min(d[i][j],d[i][k]+d[k][j]);
}
}
}
cout << d[m][k];
return 0;
}
/*
测试样例
7 10
0 4
0 1 2
0 2 5
1 2 4
1 3 6
1 4 10
3 5 1
4 5 3
5 6 9
4 6 5
2 3 2
*/