也是最短路问题,多练习一下dijkstra
#include<cstdio>
#include<iostream>
#include<cstring>
#include<cmath>
using namespace std;
const long long inf = 0x3f3f3f3f;
int n, m, g[1005][1005], vis[1005], d[1005];
int main()
{
while (cin >> m >> n) {
memset(g, inf, sizeof(g));
memset(vis, 0, sizeof(vis));
for (int i = 0; i < m; i++) {
int x, y, dis;
cin >> x >> y >> dis;
g[x][y] = min(g[x][y], dis);
g[y][x] = g[x][y];
}
for (int i = 1; i <= n; i++)
d[i] = g[1][i];
while (true) {
int k = -1;
for (int i = 1; i <= n; i++)
if (!vis[i] && (k == -1 || d[i] < d[k]))
k = i;
if (k == -1)
break;
vis[k] = 1;
for (int i = 1; i <= n; i++) {
if (!vis[i] && d[i] > d[k] + g[k][i])
d[i] = d[k] + g[k][i];
}
}
cout << d[n] << endl;
}
}