解决负权边的算法(Bellman Ford )(有向图) (1)C ~
来源:互联网 发布:淘宝网宏仁羊毛衫 编辑:程序博客网 时间:2024/06/06 13:07
这个能够判断是否有负权边,但是不能计算有负圈的图,也就是说可以有负的权边,但是不能含有负权的环。
适用条件:
1.单源最短路径(从源点s到其它所有顶点v);2.有向图&无向图(无向图可以看作(u,v),(v,u)同属于边集E的有向图);(如1 2 -3, 2 1 -3 两次输入 无向图)3.边权可正可负(如有负权回路输出错误提示);
核心代码:
int bellman_ford(){for(int i = 1; i <= n-1; i++ ){for(int j = 1; j <= m; j++ ){if(dist[edge[j].v] > dist[edge[j].u] + edge[j].w){dist[edge[j].v] = dist[edge[j].u] + edge[j].w;pre[edge[j].v] = edge[j].u;}}}int flag = 0;//判断有无负值圈for(int j = 1; j <= m; j++ ){if(dist[edge[j].v] > dist[edge[j].u] + edge[j].w){flag = 1;}}return flag;}
完整实现:
#include<stdio.h>#include<stdlib.h>#define MAX 100#define INF 65535int n, m;int dist[MAX], pre[MAX];typedef struct Edge{int u;int v;int w;}Edge;Edge edge[MAX];int bellman_ford(){for(int i = 1; i <= n-1; i++ ){for(int j = 1; j <= m; j++ ){if(dist[edge[j].v] > dist[edge[j].u] + edge[j].w){dist[edge[j].v] = dist[edge[j].u] + edge[j].w;pre[edge[j].v] = edge[j].u;}}}int flag = 0;for(int j = 1; j <= m; j++ ){if(dist[edge[j].v] > dist[edge[j].u] + edge[j].w){flag = 1;}}return flag;}void print_path(int root){if(pre[root] != -1){print_path(pre[root]);printf("->");}printf("%d",root);}int main(){scanf("%d%d",&n, &m);for(int i = 1; i <= n; i++ ){dist[i] = INF;pre[i] = -1;}dist[1] = 0;//以从顶点1开始为例for(int j = 1; j <= m; j++ ){//输入边信息 scanf("%d%d%d",&edge[j].u, &edge[j].v, &edge[j].w);}printf("\n"); if(!bellman_ford()){for(int i = 1; i <= n; i++ ){if(dist[i] != INF){print_path(i);//打印路径printf(" distance = %d\n",dist[i]); printf("\n");}}}elseprintf("有负值圈.");}
阅读全文
0 0
- 解决负权边的算法(Bellman Ford )(有向图) (1)C ~
- Dijkstra算法,Bellman-Ford算法和BFS算法解决有向图的单源最短路径问题
- Bellman-ford算法应对有向图中有权值为负的情况下求最短路径
- Bellman-Ford算法--解决负权边的单源最短路径算法
- 有向图单源最短路径之Bellman-Ford算法
- Bellman-Ford算法——解决负权边
- Bellman-Ford算法——解决负权边
- Bellman-Ford-解决负权边—C
- Bellman-Ford------解决负权边
- Bellman-Ford---解决负权边
- Bellman-Ford -解决负权边
- Bellman-Ford-解决负权边
- 图的单源最短路径Bellman-Ford算法
- hdu 1217 Arbitrage 两种算法AC代码,Floyd+Bellman-Ford 大水题一枚 注意是有向图~~
- 图的最短路径算法(四)--Bellman-Ford(解决负权边)单源点最短路径
- Bellman-Ford算法 的认识
- Bellman-Ford算法的详解
- Bellman-Ford算法的实现
- Unity 5 全局光照GI与新的烘焙系统初探,unitygi
- OpenJudge 求整数的和与均值
- 【Unity】实现“挤开”效果(不使用自带物理引擎)【改】
- 34编程练习
- 一个Android项目搞定所有主流架构:MVP+单元测试
- 解决负权边的算法(Bellman Ford )(有向图) (1)C ~
- IDEA的笔记(L1 )
- -bash: /usr/bin/python^M: bad interpreter: No such file or directory
- Ubuntu使用Anaconda安装Theano笔记
- 小写转大写
- Type Target runtime Apache Tomcat v7.0 is not defined
- Oracle之:Function :strFormatDate()
- 【ZZNU 1715 矩阵乘法】
- 语言模型