849. Dijkstra求最短路 I
题目链接https://www.acwing.com/problem/content/851/
题目:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
int a[510][510];
int dis[510];
int n,m;
bool vis[510];
int dijkstra(){
memset(dis,0x3f,sizeof dis);
dis[1]=0;
for(int i=0;i<n;i++){
int t=-1;
for(int j=1;j<=n;j++){
if(!vis[j]&&(t==-1||dis[t]>dis[j]))
t=j;
}
if(t==-1||dis[t]==0x3f3f3f3f) break;
for(int j=1;j<=n;j++){
if(!vis[j]&&dis[j]>dis[t]+a[t][j])
dis[j]=dis[t]+a[t][j];
}
vis[t]=1;
}
if(dis[n]==0x3f3f3f3f) return -1;
return dis[n];
}
int main(){
cin>>n>>m;
int x,y,z;
memset(a,0x3f,sizeof a);
for(int i=0;i<m;i++){
scanf("%d%d%d",&x,&y,&z);
a[x][y]=min(a[x][y],z);
}
cout<<dijkstra();
return 0;
}