图论最短路之bellman-ford
2013-05-15 14:43
357 查看
#include<stdio.h> #include<iostream> #include<string.h> using namespace std ; const int INF = 1000000 ; const int maxn = 8 ; int n ; int edge[ maxn ][ maxn ] ; int dist[ maxn ] ; int path[ maxn ] ; void bellman( int v0 ) { int i , j , k , u ; for( i = 0 ; i < n ; i++ ) { dist[ i ] = edge[ v0 ][ i ] ; if( i != v0 && dist[ i ] < INF ) path[ i ] = v0 ; else path[ i ] = -1 ; } for( k = 2 ; k < n ; k++ ) { for( u = 0 ; u < n ; u++ ) { if( u != v0 ) { for( j = 0 ; j < n ; j++ ) { if( edge[ j ][ u ] < INF && dist[ j ] + edge[ j ][ u ] < dist[ u ] ) { dist[ u ] = dist[ j ] + edge[ j ][ u ] ; path[ u ] = j ; } } } } } } int main() { int i , j ; int u , v , w ; scanf( "%d" , &n ) ; while( 1 ) { scanf( "%d%d%d" , &u , &v , &w ) ; if( u == -1 && v == -1 && w == -1 ) break ; edge[ u ][ v ] = w ; } for( i = 0 ; i < n ; i++ ) { for( j = 0 ; j < n ; j++ ) { if( i == j ) edge[ i ][ j ] = 0 ; else if( edge[ i ][ j ] == 0 ) edge[ i ][ j ] = INF ; } } bellman( 0 ) ; int shortest[ maxn ] ; for( i = 1 ; i < n ; i++ ) { printf( "%d\t" , dist[ i ] ); memset( shortest , 0 , sizeof( shortest ) ) ; int k = 0 ; shortest[ k ] = i ; while( path[ shortest[ k ] ] != 0 ) { k++ ; shortest[ k ] = path[ shortest[ k - 1 ] ] ; } k++ ; shortest[ k ] = 0 ; for( j = k ; j > 0 ; j-- ) printf( "%d---->" , shortest[ j ] ) ; printf( "%d\n" , shortest[ 0 ] ) ; } return 0 ; } 7
0 1 6
0 2 5 0 3 5 1 4 -1 2 1 -2 2 4 1 3 2 -2 3 5 -1 4 6 3 5 6 3 -1 -1 -1 1 0---->3---->2---->1 3 0---->3---->2 5 0---->3 0 0---->3---->2---->1---->4 4 0---->3---->5 3 0---->3---->2---->1---->4---->6
*/
相关文章推荐
- 图论: bellman_ford 求单源最短路…
- ⑨讲图论第五课: Bellman-Ford算法求最短路
- 图论 最短路 Bellman_Ford 专题
- nullnull图论最短路之bellman-ford
- ACM模板 Bellman_Ford,单源最短路,图论
- 图论浅析--最短路之Bellman-Ford
- POJ 3259 Wormholes (图论---最短路 Bellman-Ford || SPFA)
- 图论浅析--最短路之Bellman-Ford
- 图论总结 Dijkstra Tarjan 最小生成树 二分图 最短路 强连通分量 双连通分量 Bellman-Ford SPFA 二分图染色 Kruskal Prim 网络流 二分图匹配 Dinic
- ⑨讲图论第五课: Bellman-Ford算法求最短路
- 最短路模板(Dijkstra & Dijkstra算法+堆优化 & bellman_ford & 单源最短路SPFA)
- POJ 3169 Layout bellman_ford 最短路
- 图论之Bellman-Ford
- 暑假-最短路(Bellman-ford、spfa)-A - Arbitrage
- 暑假-最短路(Bellman-ford、spfa)-C - Minimum Transport Cost
- 算法训练 最短路 Bellman-Ford
- HDU2544_最短路(Dijkstra)(Bellman-Ford)(SPFA+邻接表/邻接矩阵)
- 图论;单源最短路径;拓扑排序+松弛(有向无回路);Bellman-Ford(回路,负权回路);Dijkstra(无负权,可回路);可以用最小堆实现算法的优化;
- 图论: Bellman_ford + 队列 + 邻接…
- 算法基础篇:常见图论最短路算法(Bellman-Ford→SPFA→Dijkstra Floyd-Warshall )入门以及代码解析