博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
解决负权边的算法(Bellman Ford )(有向图) (1)C ~
阅读量:4216 次
发布时间:2019-05-26

本文共 1665 字,大约阅读时间需要 5 分钟。

这个能够判断是否有负权边,但是不能计算有负圈的图,也就是说可以有负的权边,但是不能含有负权的环。

适用条件:

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
#include
#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"); } } } else printf("有负值圈."); }

你可能感兴趣的文章
c++ 中的多重继承和其权限问题
查看>>
那些年
查看>>
android listview 图文并茂
查看>>
《浪潮之巅》1 AT&T
查看>>
《浪潮之巅》2蓝色巨人 IBM公司
查看>>
《浪潮之巅》3水果公司的复兴
查看>>
《浪潮之巅》4计算机工业的生态链
查看>>
《浪潮之巅》5奔腾的芯 英特尔公司
查看>>
《浪潮之巅》7 互联网的金门大桥 -—思科公司
查看>>
python语言程序设计基础笔记(三)从题目到方案
查看>>
读取txt文件出现出现多余空行问题
查看>>
从理论到实践开发自己的聊天机器人
查看>>
@***装饰器(python)
查看>>
最优化算法之梯度下降法
查看>>
激活函数之ReLU函数
查看>>
经典排序算法详解
查看>>
概述类加载器及类加载过程
查看>>
MySQL SQL优化总结
查看>>
MySQL MyISAM引擎的读锁与写锁
查看>>
面向对象与面向过程的本质的区别
查看>>