这道题实际非常简单好奇是怎么变黄的...
其实也就是一个SPFA,本人非常懒,不想打邻接表,直接用矩阵就好啦...
#include<bits/stdc++.h>
using namespace std;
int n,a[][],m,fr,to;
void add(int x,int y,int z){a[x][y]=z;}
int dis[];
bool vis[];
queue<int> q;
void SPFA(int from){
vis[from]=;
q.push(from);dis[from]=;
while(!q.empty()){
int p=q.front();vis[p]=;
q.pop();
for(int i=;i<=n;i++){
if(a[p][i]!=&&dis[i]>dis[p]+a[p][i]){
dis[i]=dis[p]+a[p][i];
if(vis[i]==){
vis[i]=;
q.push(i);
}
}
}
}
}
int main(){
scanf("%d%d%d%d",&n,&m,&fr,&to);
for(int i=;i<=m;i++){
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
}
memset(dis,,sizeof(dis));
SPFA(fr);
printf("%d\n",dis[to]);
}