复习一下Dijkstra算法
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 510;
int g[N][N];
int dist[N];
int st[N];
int n,m;
int dijkstra()
{
memset(dist, 0x3f, sizeof dist);
dist[1]=0;
memset(st, 0, sizeof st);
int t=0;
while(t!=-1)
{
t=-1;
for(int i=1;i<=n;i++)
{
if(!st[i]&&(t==-1||dist[i]<=dist[t]))
{
t=i;
}
}
st[t]=1;
if(t==-1) break;
for(int i=1;i<=n;i++)
{
dist[i]=min(dist[i],dist[t]+g[t][i]);
}
}
if(dist[n]== 0x3f3f3f3f) return -1;
else return dist[n];
}
int main()
{
cin>>n>>m;
memset(g, 0x3f3f3f3f, sizeof g);
while (m -- )
{
int x,y,z;
scanf("%d%d%d", &x, &y,&z);
g[x][y]=min(g[x][y],z);
}
int dd=dijkstra();
cout<<dd<<endl;
}