1381:城市路(Dijkstra)
#include<bits/stdc++.h>
using namespace std;
struct Edge
{
int next; //下一条边的编号
int to; //这条边到达的点
int dis; //这条边的长度
}edge[20020];
int head[2020]; //顶点的某一条边
int num_edge; //边的编号
void add_edge(int from,int to,int dis) //加入一条从from到to距离为dis的单向边
{
++num_edge;
edge[num_edge].next=head[from];
edge[num_edge].to=to;
edge[num_edge].dis=dis;
head[from]=num_edge;
}
int n,m,dis[2020];
bool v[2020];
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++){
int u,v,l;
cin>>u>>v>>l;
add_edge(u,v,l);
add_edge(v,u,l);
}
for(int i=1;i<=n;i++){
dis[i]=0x7fffffff;
}
dis[1]=0;
for(int i=1;i<n;i++){
int minn=0x7fffffff;
int u;
for(int i=1;i<=n;i++){
if(!v[i]&&dis[i]<minn){
minn=dis[i];
u=i;
}
}
v[u]=true;
for(int i = head[u]; i ; i= edge[i].next ){
dis[edge[i].to] = min(dis[edge[i].to], dis[u] + edge[i].dis);
}
}
if(dis[n]==0x7fffffff){
cout<<-1;
}else{
cout<<dis[n];
}
}
本文来自博客园,作者:I'm_江河湖海,转载请注明原文链接:https://www.cnblogs.com/jhhh/p/16760630.html