题目
样例
典型的最短路,用Dijkstra做
#include <cstdio>
#include <cstring>
#include <algorithm>
//#include <bits/stdc++.h>
#include <iostream>
#include <cstdio>
#define inf 0x3f3f3f3f
using namespace std;
# define MAX 1000+4
int n, t;
int edge[MAX][MAX];
int dis[MAX];
int book[MAX];
int u, v;
void init()
{
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (i == j)
{
edge[i][j] = 0;
}
else
{
edge[i][j] = inf;
}
}
}
}
void input()
{
for (int i = 0; i < t; i++)
{
int t1, t2, t3;
cin >> t1 >> t2 >> t3;
if (t3 < edge[t1][t2])
{
edge[t1][t2] = t3;
edge[t2][t1] = t3;
}
}
}
void Dijkstra()
{
for (int i = 1; i <= n; i++)
{
book[i] = 0;
dis[i] = edge[n][i];
}
int _min;
for (int i = 1; i <= n - 1; i++)
{
_min = inf;
for (int j = 1; j <= n; j++)
{
if (book[j] == 0 && dis[j] < _min)
{
_min = dis[j];
u = j;
}
}
book[u] = 1;
for (v = 1; v <= n; v++)
{
if (book[v] == 0 && dis[v] > dis[u] + edge[u][v])
{
dis[v] = dis[u] + edge[u][v];
}
}
}
}
int main()
{
while (cin >> t >> n)
{
init();
input();
Dijkstra();
cout << dis[1] << endl;
}
return 0;
}