#include<bits/stdc++.h>
using namespace std;
struct Node{
int id,dis;
Node(){}
Node(const int&id,const int&dis){
this->dis=dis;
this->id=id;
}
};
auto cmp=[](const Node&a,const Node&b)->bool{
return a.dis>b.dis;
};
const int maxn=2505,inf=0x3f3f3f3f;
int g[maxn][maxn],dis[maxn];
int t,c,ts,te;
bool vis[maxn];
priority_queue<Node,vector<Node>,decltype(cmp)> q(cmp);
int dijkstra(const int&s,const int&e){
q.push(Node(s,0));
while(!vis[e]){
Node p=q.top();q.pop();
if(vis[p.id]) continue;
vis[p.id]=true;
for(int i=1;i<=t;i++){
if(p.id!=i&&!vis[i]&&g[p.id][i]!=inf&&dis[i]>g[p.id][i]+dis[p.id]){
dis[i]=g[p.id][i]+dis[p.id];
q.push(Node(i,dis[i]));
}
}
}
return dis[e];
}
int main(){
cin>>t>>c>>ts>>te;
memset(g,0x3f,sizeof(g));
memset(vis,false,sizeof(vis));
memset(dis,0x3f,sizeof(dis));
for(int i=1;i<=c;i++){
int u,v,w;cin>>u>>v>>w;
g[u][v]=g[v][u]=min(g[u][v],w);
}
/*for(int i=1;i<=t;i++){
for(int j=1;j<=t;j++) cout<<setw(11)<<g[i][j];
cout<<'\n';
}*/
cout<<dijkstra(ts,te);
return 0;
}
dijkstra中莫名出现死循环,求助,必关。