标签:mystra 编程算法 单源最短路 bellman-ford 代码
本文地址: http://blog.csdn.net/caroline_wendy
单源最短路: 固定一个起点, 求它到其他所有点的最短路的问题.
Bellman-Ford: 设当前到顶点i的最短路长度为d[i], 并设初值d[s]=0, d[i]=INF,
再不断使用递推关系式d[e.to] = d[e.from] + e.cost更新d的值.
时间复杂度: O(V*E)
代码:
/* * CppPrimer.cpp * * Created on: 2013.11.12 * Author: Caroline */ /*eclipse cdt*/ #include <stdio.h> #include <limits.h> #include <vector> using namespace std; class Program { static const int MAX_V = 100; static const int MAX_E = 100; const int INF = INT_MAX>>2; struct edge {int from, to, cost; }; edge es[MAX_E] = { {0,1,2}, {0,2,5}, {1,0,2}, {1,2,4}, {1,3,6}, {1,4,10}, {2,0,5}, {2,1,4}, {2,3,2}, {3,2,2}, {3,1,6}, {3,5,1}, {4,1,10}, {4,5,3}, {4,6,5}, {5,3,1}, {5,4,3}, {5,6,9}, {6,4,5}, {6,5,9} }; int V = 7, E = 20; public: int d[MAX_V]; void shortest_path(int s) { for (int i=0; i<V; ++i) d[i] = INF; d[s] = 0; while (true) { bool update = false; for (int i=0; i<E; i++) { edge e = es[i]; if (d[e.from] != INF && d[e.to] > d[e.from] + e.cost) { d[e.to] = d[e.from] + e.cost; update = true; } } if (!update) break; } } }; int main (void) { Program iP; iP.shortest_path(0); for (int i=0; i<7; i++) { printf("%d = %d\n", i, iP.d[i]); } return 0; }
0 = 0 1 = 2 2 = 5 3 = 7 4 = 11 5 = 8 6 = 16
编程算法 - 单源最短路问题 Bellman-Ford 代码(C),布布扣,bubuko.com
编程算法 - 单源最短路问题 Bellman-Ford 代码(C)
标签:mystra 编程算法 单源最短路 bellman-ford 代码
原文地址:http://blog.csdn.net/caroline_wendy/article/details/38170717