描述
hdu 2544
思路
dijkstra算法
题解
#include <algorithm>
#include <string>
#include <iostream>
#include <set>
#include <vector>
#include <queue>
#include <cstring>
#include <iostream>
#include <cstdlib>
#include <cstdio>
int dis[101];
bool vis[101];
int g[101][101];
int main()
{
int n, m;
while (scanf("%d %d", &n, &m), n + m)
{
int a, b, c;
memset(g, 0, sizeof(int) * 101 * 101);
memset(vis, 0, sizeof(vis));
for (int i = 0; i <= 101; i++)
dis[i] = 0x7fffffff;
while (m--)
{
scanf("%d %d %d", &a, &b, &c);
g[a][b] = c;
g[b][a] = c;
}
for (int i = 2; i <= n; i++)
if (g[1][i]) dis[i] = g[1][i];
dis[1] = 0;
vis[1] = 1;
for (int i = 1; i < n; i++)
{
int u = 0;
int min = 0x7fffffff;
for (int j = 2; j <= n; j++)
if (!vis[j] && dis[j] < min)
min = dis[j], u = j;
vis[u] = 1;
for (int j = 2; j <= n; j++)
{
if (!vis[j] && g[u][j])
dis[j] = std::min(dis[j], dis[u] + g[u][j]);
}
}
printf("%d\n", dis[n]);
}
}