输入:
7 11 5 4
2 4 2
1 4 3
7 2 2
3 4 3
5 7 5
7 3 3
6 1 1
6 3 4
2 4 3
5 6 3
7 2 1
输出:
7
直接floyd算法走起:
#include <iostream>
#include <cstring>
using namespace std;
int c,t,ts,te,ti,dis[2501],f[2501][2501],fi,d;
bool flag[2501]= {
0};
int main() {
cin>>t>>c>>ts>>te;
memset(f,9999999,sizeof(f)); //先把每个距离设为假想无穷大
for(int i=1; i<=c; i++) {
cin>>fi>>ti>>d;
f[fi][ti]=f[ti][fi]=d; //由于这是无向图,所以需要对称一下
}
for(int i=1; i<=t; i++) dis[i]=f[ts][i];
flag[ts]=true;
for(int i=1; i<t; i++) {
int minl=9999999,k=0;
for(int j=1; j<=t; j++)
if(!flag[j]&&dis[j]<minl) //Floyd模板代码
minl=dis[j],k=j;
if(k==0) break;
flag[k]=true;
for(int j=1; j<=t; j++)
if(dis[k]+f[k][j]<dis[j]) //还是个模板
dis[j]=dis[k]+f[k][j];
}
cout<<dis[te];
}