#include <bits/stdc++.h>
using namespace std;
const int N=11000;
int dis[11000];
vector<int>len[N];
vector<int>edge[N];
struct cmp{
bool operator()(int x,int y){
return dis[x]>dis[y];
}
};
void dij(int u){
priority_queue<int,vector<int>,cmp >heap;
heap.push(u);
dis[u] = 0;
while(!heap.empty()){
int u = heap.top();
int i = -1;
for(auto v:edge[u]){
i ++;
if(dis[v]>dis[u]+len[u][i]){
dis[v] = dis[u]+len[u][i];
heap.push(v);
}
}
heap.pop();
}
}
int main()
{
// freopen("a.txt","r",stdin);
ios::sync_with_stdio(0);
int i,n,m;
while(cin>>n>>m)
{
for(i = 1;i <= n;i ++) dis[i] = 1e9;
for(i = 1;i <= n;i ++) edge[i].clear();
for(i = 1;i <= n;i ++) len[i].clear();
for(i = 1;i <= m;i ++){
int u,v,l;
cin>>u>>v>>l;
edge[u].push_back(v);
edge[v].push_back(u);
len[u].push_back(l);
len[v].push_back(l);
}
dij(1);
cout<<dis[n]<<endl;
}
return 0;
}
堆优化的Dijkstra(cmp函数的写法)
猜你喜欢
转载自blog.csdn.net/qq_30358129/article/details/80572746
今日推荐
周排行