hdu 2544 最短路(floyd)
Posted kanoon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu 2544 最短路(floyd)相关的知识,希望对你有一定的参考价值。
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2544
题意
给出一个 $n$ 点 $m$ 边的带权无向图,找出结点 $1$ 到结点 $n$ 的路径最小权。($n le 100, m le 10000$)
题解
$n$ 的范围较小,可以用 $O_{(n^3)}$ 的 $floyd$,算法的整体思想是枚举中转点和起始端点。
证明
假设两点间存在一条最小权路径,那么该路径上的结点一定会被作为中转点从小到大依次枚举,路径的权值即得以更新。
代码
#include <bits/stdc++.h> using namespace std; const int N = 110; const int INF = 1e9; int n, m; int dis[N][N]; void floyd() { for (int k = 1; k <= n; ++k) { for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { dis[i][j] = min(dis[i][j], dis[i][k] + dis[k][j]); } } } cout << dis[1][n] << " "; } int main() { while (cin >> n >> m and (n or m)) { fill(*dis, *dis + N * N, INF); for (int i = 0; i < m; ++i) { int u, v, l; cin >> u >> v >> l; dis[u][v] = dis[v][u] = l; } floyd(); } }
以上是关于hdu 2544 最短路(floyd)的主要内容,如果未能解决你的问题,请参考以下文章
hdoj2544 最短路(Dijkstra || Floyd || SPFA)