hdu 1874 畅通工程续(图论:两点之间最短路-弗洛伊德算法 || 贝尔曼福特算法)
2014-07-20 19:41
357 查看
随便找的题写的,刚看到是求最短路,还以为需要用Dijkstra写呢
翻了翻白书发现有更简单的方法一floyd算法
以前做比赛听别人说起这个算法总感觉很牛逼的样子...
没想到这个算法这么简单
代码如下:
刚学习了下贝尔曼福特算法,那这个题练练手
代码如下:
翻了翻白书发现有更简单的方法一floyd算法
以前做比赛听别人说起这个算法总感觉很牛逼的样子...
没想到这个算法这么简单
代码如下:
#include <cstdio> #include <iostream> #include <algorithm> #define MAXN 10010 #define INF 5e8 #define LL long long using namespace std; int m, n; int g[MAXN][MAXN]; LL floyd(int x, int y) { int i, j, k; for(k=0; k<n; ++k) { for(i=0; i<n; ++i) { for(j=0; j<n; ++j) g[i][j] = min(g[i][j], g[i][k]+g[k][j]); } } return g[x][y]; } int main(void) { int i, j, x, y, len; LL ans; while(scanf("%d%d", &n, &m) != EOF) { for(i=0; i<n; ++i) {//使用floyd之前的初始化 g[i][i] = 0; for(j=i+1; j<n; ++j) { g[i][j] = g[j][i] = INF; } } while(m--) { scanf("%d%d%d", &x, &y, &len); g[x][y] = g[y][x] = min(g[x][y], len);//这一步很重要,直接输入会WA,说明两点之间路径可能会不止一条 } scanf("%d%d", &x, &y); ans = floyd(x, y); if(ans >= INF) ans = -1; cout << ans << endl; } return 0; }
刚学习了下贝尔曼福特算法,那这个题练练手
代码如下:
#include <cstdio> #include <iostream> #include <algorithm> #define MAXN 10010 #define INF 0x7fffffff #define LL long long using namespace std; int d[MAXN], u[MAXN], v[MAXN], w[MAXN]; int n, m, a, b; void Bellman() { int i, j, x, y; for(i=0; i<n; ++i) { d[i] = INF; } d[a] = 0; for(i=0; i<n; ++i) { for(j=0; j<2*m; ++j) { x = u[j]; y = v[j]; if(d[x] < INF)//这个判断很重要,不然d[x]+w[i]可能会得到负数 d[y] = min(d[y], d[x]+w[j]); } } if(d[b] < INF) { printf("%d\n", d[b]); } else printf("-1\n"); } int main(void) { int i; while(scanf("%d%d", &n, &m) != EOF) { for(i=0; i<m; ++i) { scanf("%d%d%d", &u[i], &v[i], &w[i]); v[i+m] = u[i]; u[i+m] = v[i]; w[i+m] = w[i]; } scanf("%d%d", &a, &b); Bellman(); } return 0; }
相关文章推荐
- 【1874】畅通工程续 (最短路四种算法)(HDU)
- 最短路-四种算法复杂度分析比较 HDU-1874 畅通工程
- 【1874】畅通工程续 (最短路四种算法)(HDU)
- HDU - 1874 - 畅通工程续(最短路,Floyd,图论基础题)
- HDU 1874 畅通工程续(单源最短路之Dijkstra n^2算法)
- hdu 1874 畅通工程续(最短路)
- hdu 1874 畅通工程续 - 最短路
- HDU1874:畅通工程续(最短路Dijkstra(n^2+nlogn)+Floyd+SPFA(堆栈+队列))
- hdu 1874 畅通工程续 - 最短路
- HDU1874_畅通工程续(Dijkstra最短路)
- HDU 1874 畅通工程续 最短路
- HDU 1874 畅通工程续 (最短路)
- hdu 1874 畅通工程续(最短路)
- hdu 2544 最短路 图论-求两点之间的最短距离 Dijkstra
- hdu1874 畅通工程续 (最短路)
- HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,floyd水
- (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。
- (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。
- HDOJ/HDU---1874 畅通工程续 最短路(dijkstra)
- HDU 1874-畅通工程续(最短路Dijkstra+优先队列)