单源最短路(Bellman_Ford)
2012-10-21 15:51
369 查看
#include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define INF 0x7fffffff using namespace std; const int maxn = 1000; const int maxm = 1000000; typedef struct node{ int w; int to; int next; }NODE; int dist[maxn]; NODE edge[maxm]; int head[maxn]; int num = 0; int s = 0; int n, m; int Bellman_Ford(){ int i, j, k; for(i = 0; i < n; i++){ dist[i] = INF; } dist[s] = 0;//别忘了给S赋值这可是程序执行的开始。 for(i= 0; i < n-1; i++){ for(j = 0; j < n; j++){ if(dist[j] == INF) { continue; } for(k = head[j]; k != -1; k = edge[k].next){ if(edge[k].w != INF && dist[edge[k].to] > dist[j] + edge[k].w){ dist[edge[k].to] = dist[j] + edge[k].w; } } } } for(j = 0; j < n; j++){ if(dist[j] == INF){ continue; } for(k = head[j]; k != -1; k = edge[k].next){ if(edge[k].w !=INF && dist[edge[k].to] > dist[j] + edge[k].w){ return false; } } } return true; } void output_result(){ for(int i = 1; i <= n; i++){ printf("%d\n", dist[i]); } } void init(){ num = 0; memset(dist, 0, sizeof(dist)); memset(head, -1, sizeof(head)); } int main() { int a = 0, b = 0, c = 0; while(scanf("%d%d", &n, &m)!=EOF){ init(); a = INF; cout << a << endl; for(int i = 0; i < m; i++){ scanf("%d%d%d", &a, &b, &c); edge[num].w = c; edge[num].to = b; edge[num].next = head[a]; head[a] = num; num++; } cout << "please input a source:" << endl; scanf("%d", &s); int res = Bellman_Ford(); if(res) { output_result(); } } return 0; } /**************** 测试数据算法导论P362 5 10 1 2 6 1 3 7 2 3 8 2 4 5 2 5 -4 3 4 -3 3 5 9 4 2 -2 5 4 7 5 1 2 ************/
相关文章推荐
- hdu 2544 【总结】 Dijkstra,Bellman-Ford ,SPFA 最短路求法及对应优化
- 广度优先搜索以及队列优化的 Bellman-Ford 短路算法
- HDU 2544 最短路【Bellman_Ford 】
- HDU 2544 最短路 floyd djkstra(邻接表,邻接矩阵) spfa bellman-ford 模板题
- ⑨讲图论第五课: Bellman-Ford算法求最短路
- nullnull图论最短路之bellman-ford
- poj3259 bellman_ford 算法 判环 最短路
- 浅谈最短路中的Bellman–Ford 算法 (SPFA
- 图论总结 Dijkstra Tarjan 最小生成树 二分图 最短路 强连通分量 双连通分量 Bellman-Ford SPFA 二分图染色 Kruskal Prim 网络流 二分图匹配 Dinic
- AYOJ 最短路(Bellman_Ford)
- 最短路模版(floyed/dijkstra/bellman-ford/spfa)
- 最短路知识点总结(Dijkstra,Floyd,SPFA,Bellman-Ford)
- 模板--Floyd Dijkstra Bellman-Ford spfa 四种最短路经典算法
- HDU 1874 (最短路 ---Bellman_Ford)
- 最短路(Bellman_Ford) POJ 1860 Currency Exchange
- 算法训练 最短路 Bellman-Ford
- UVA 10986 - Sending email(最短路 优先队列的优化+Bellman-Ford)
- 最短路知识点总结(Dijkstra,Floyd,SPFA,Bellman-Ford)
- Bellman-Ford 求含负权最短路
- Bellman_Ford ----->最短路