Bellman-Ford算法实现
来源:互联网 发布:网络电子赌博的危害 编辑:程序博客网 时间:2024/06/05 10:20
根据算法导论里面的算法实现的。如下:
#include <stdio.h>struct vertex{ int weight; int dist; int parent;};#define MAX_SIZE 50struct vertex data[MAX_SIZE][MAX_SIZE];int size;int source;#define MAX_VALUE (1 << 31 -1 )//int short_dist[MAX_SIZE];void read_data(void){ scanf("%d", &source); int edges; scanf("%d %d", &size, &edges); int i, j; for(i = 0; i < size; i++) { for(j = 0; j < size; j++) { if(i != j) { data[i][j].weight = MAX_VALUE; } else { data[i][j].weight = 0; } } } for(i = 0; i < edges; i++) { int p, q; scanf("%d %d", &p, &q); scanf("%d", &data[p][q].weight); }}void init_single_source(int s){ int i; for(i = 0; i < size; i++) { if( i != s) { data[s][i].dist = MAX_VALUE; } else { data[s][i].dist = 0; } }}int bellman_ford(int s){ init_single_source(s); int k; for(k = 1; k < size; k++) { int i, j; for(i = 0; i < size; i++) { for(j = 0; j < size; j++) { if(data[i][j].weight < MAX_VALUE) { if(data[s][i].dist < MAX_VALUE && data[s][j].dist > data[s][i].dist + data[i][j].weight) { data[s][j].dist = data[s][i].dist + data[i][j].weight; } } } } } int i, j; for(i = 0; i < size; i++) { for(j = 0; j < size; j++) { if(data[i][j].weight < MAX_VALUE) { if(data[s][j].dist > data[s][i].dist + data[i][j].weight) { return 0; } } } } return 1;}int main(int argc, char **argv){ read_data(); int ret = bellman_ford(source); if(ret == 0) { printf("contains a negative cycle\n"); } else { int i; for(i = 1; i < size; i++) { printf("(%d, %d): %d\n", source, i, data[source][i].dist); }// printf("ok\n"); } return 0;}
输入文件格式:
05 100 1 61 2 52 1 -20 4 71 4 81 3 -43 2 73 0 24 3 94 2 -3
其中, 第一行为源顶点,第二行行分别为顶点个数,和边的个数。以下每行分别为每条边的起始,终止顶点和权值。
输出:
(0, 1): 2(0, 2): 4(0, 3): -2(0, 4): 7
0 0
- Bellman-ford算法实现
- Bellman-Ford算法实现
- Bellman-Ford算法实现类
- Bellman-Ford算法的实现
- Bellman-Ford算法实现小结
- C++算法实现Bellman-Ford算法
- Java C 实现Bellman-ford算法
- Bellman-Ford 算法实现单源最短路径
- POJ3259—Bellman-Ford算法实现
- Bellman-Ford贝尔曼福特算法实现
- Bellman-Ford&SPFA算法
- Bellman-Ford 算法详解
- Bellman-Ford算法
- Bellman-Ford算法
- Bellman-Ford路由算法
- Bellman-Ford算法分析
- bellman ford算法
- Bellman-Ford算法
- leetcode 100 same tree
- Highgui_1_用户界面
- Kubernetes 1.3 从入门到进阶 安装篇(1)
- js变量
- leetcode 101. Symmetric Tree
- Bellman-Ford算法实现
- 机器学习算法基础概念学习总结
- 使用django-grappelli美化diango后台
- django STATIC_URL STATIC_ROOT MEDIA_URL MEDIA_ROOT
- 21File练习
- 【t040】SETI任务
- 分数拆分
- POJ2538 ZOJ1884 UVA10082 WERTYU
- LoadRunner录制自带WebTour过程,及问题排错。