Til the Cows Come Home
#include <iostream>
#include <algorithm>
#include <vector>
#include <cstring>
#include <set>
#include <map>
#include <queue>
#include <cstdio>
using namespace std;
const int maxn =1e3+10;
const int inf = 0x3f3f3f3f;
int G[maxn][maxn];
int dis[maxn],vis[maxn];
int n,m,a,b,c;
void dijkstra(int x)
{
memset(vis,0, sizeof(vis));
for(int i = 1;i <=n;i++)
dis[i] = G[x][i];
vis[x] =1;
dis[x] =0;
for(int i = 1;i<n;i++)
{
int minl = inf,k=-1;
for(int j =1;j<=n;j++)
{
if(!vis[j] && dis[j] < minl)
{
minl = dis[j];
k = j;
}
}
if(k == -1)
break;
vis[k] = 1;
for(int j =1;j<=n;j++)
{
if(!vis[j] && dis[k] + G[k][j] < dis[j])
dis[j] = dis[k] + G[k][j];
}
}
}
int main()
{
memset(dis,inf,sizeof(dis));
memset(G,inf,sizeof(G));
scanf("%d%d",&m,&n);//题目输入有坑!
for(int i = 0;i < m;i++)
{
scanf("%d%d%d",&a,&b,&c);
if(c < G[a][b])
G[a][b] = G[b][a] = c;
}
dijkstra(1);
printf("%d\n",dis[n]);
return 0;
}