#include<bits/stdc++.h>
using namespace std;
int a[1010][1010];
int d[1010];
bool f[1010];
int n,m,s,t,r[1010];
const int INT=0x3f3f3f3f;
void print(int x){
if(x==0){
return;
}
print(r[x]);
cout<<x<<" ";
}
int main(){
cin>>n>>m>>s>>t;
for(int i=1;i<=m;i++){
int x,y,l;
cin>>x>>y>>l;
if(a[x][y]==0||a[x][y]>l){
a[x][y]=l;
a[y][x]=l;
}
}
memset(d,INT,sizeof(d));
d[s]=0;
for(int i=1;i<=n;i++){
int mi=0;
for(int j=1;j<=n;j++){
if(!f[j]&&(d[mi]>d[j]||mi==0)){
mi=j;
}
}
f[mi]=true;
for(int j=1;j<=n;j++){
if(!f[j]&&a[mi][j]!=0&&d[mi]+a[mi][j]<d[j]){
d[j]=d[mi]+a[mi][j];
r[j]=mi;
}
}
}
if(d[t]!=INT){
cout<<d[t]<<endl;
print(t);
} else{
cout<<"can't arrive"<<endl;
}
return 0;
}
B. 最短距离和路径问题题目描述有 nn 个城市(编号为 1∼n1∼n),mm 条道路(n<1000,m<10000n<1000,m<10000),每条道路有个长度
于 2024-08-09 22:25:10 首次发布