#include <iostream>
#include <stdio.h>
#include <bits/stdc++.h>
using namespace std;
const int INF=1000000;
int v,e,S,G;
int E[100][100];
int d[100];//i到源点最短距离
bool used[100];//是否已经计算过
int djst(){
fill(d,d+100,INF);
fill(used,used+100,false);
d[S]=0;
while(true){
int minv=-1;
for(int i=0;i<v;i++){//找最小距离点
if(!used[i] && (minv==-1 || d[minv]>d[i])) minv=i;
}
if(minv==-1) break;
used[minv]=true;
for(int i=0;i<v;i++){
if(E[minv][i] && d[i]>d[minv]+E[minv][i]) d[i]=d[minv]+E[minv][i];//更新
}
cout<<d[minv]<<" ";
}
return d[G];
}
int main(){
cin>>v>>e>>S>>G;
for(int i=0;i<v;i++){
for(int j=0;j<v;j++){
E[i][j]=INF;
}
}
for(int i=0;i<e;i++){
int s,t,cost;
cin>>s>>t>>cost;
E[s][t]=cost;
E[t][s]=cost;
}
cout<<djst();
return 0;
}
dijkstra
最新推荐文章于 2023-02-22 23:33:21 发布