Dijkstra直接求解
2025-06-30 15:47:28
发布于:浙江
5阅读
0回复
0点赞
Dijkstra直接求解
#include<bits/stdc++.h>
using namespace std;
struct Node{
long long v,val;
friend bool operator < (Node a,Node b){
return a.val>b.val;
}
};
long long n,m,s,t;
struct G_data{
long long v,w;
};
priority_queue<Node> q;
vector<G_data> G[6300];
bool vis[2600];
long long dis[5000];
const long long INF=1e9+7;
void dij(){
for(int i=0;i<=n+10;i++){
dis[i]=INF;
}
dis[s]=0;
q.push({s,0});
while(!q.empty()){
Node f=q.top();
q.pop();
vis[f.v]=true;
for(int i=0;i<G[f.v].size();i++){
int next_pos=G[f.v][i].v;
int w=G[f.v][i].w;
if(dis[next_pos]>w+dis[f.v]){
dis[next_pos]=w+dis[f.v];
if(vis[next_pos])continue;
q.push({next_pos,dis[next_pos]});
}
}
}
}
int main(){
cin>>n>>m>>s>>t;
while(m--){
int u,v,w;
cin>>u>>v>>w;
G[u].push_back({v,w});
G[v].push_back({u,w});
}
dij();
cout<<dis[t]<<endl;
return 0;
}
这里空空如也
有帮助,赞一个