算法实验四:寻找加权有向图中的一个负环

本文介绍了如何在加权有向图中寻找负环的问题。利用Bellman-Ford算法进行初步判断,当发现能松弛的边时,通过前驱节点遍历,收集边并检查是否存在环。一旦发现重复节点,即可确认找到负环,并返回环中的节点序列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

给定一个有向图,图中边的权重有正有负,设图中存在若干负环,设计算法找到一个负环。

思路描述:

利用bellman_ford的方法先判断有没有环,如果有环,保存这条能relax的边,然后通过他的前驱点往前遍历,并将这些边保存到一个数组里,在过程中先判断是否出现了此点,如果出现说明找到环,这个点以及后面的点都是这个环中的点,否则继续加入数组中。

算法实现:

bool linkedDgraph1::BellmanFord(int s,int *res)//起始点,保存环中的点的数组
{
	int * d = new int[verticeNumber];
	int k1 = 0,k2=0,count=1;
	bool exist = false;
	for (int i = 0; i < verticeNumber+1; i++)//初始化表示
		d[i] = 1000000;
	for (int i = 1; i < verticeNumber; i++)
	{

		for (int j = 0; j < verticeNumber; j++)
		{
			int u = point[j];
			graphNode<int>* p = Adj[u].first();
			
			while (p != NULL)
			{
				int v = p->element;
				if (d[v] > d[u] + getWeight(u, v))//relax操作
				{
					d[v] = d[u] + getW
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值