poj1860(图论,bellman-ford)

这篇博客探讨了如何利用图论中的Bellman-Ford算法解决一个货币兑换问题。题目要求在给定的货币兑换网络中,判断是否能通过兑换增加初始货币的数量,最终换回原始货币。作者通过将每种货币视为图中的节点,兑换关系表示为边,建立了数学模型,并指出存在正权回路时可能存在增值路径。文章中提到了将Bellman-Ford算法逆用的方法,以及尝试使用SPFA算法但效果不佳的情况。
摘要由CSDN通过智能技术生成

传送门:poj1860

题意:有多种货币和多个货币兑换处,每个货币兑换处能将确定的两种货币互相兑换,但要收取一定的手续费,给你一种初始货币和一定的数量问你能不能经过兑换后使其数量变多。最后要换回初始的货币种类。

货币兑换公式:Vb=(Va-Cab)*Rab.

将每种货币看为一个点,一种货币能兑换兑换成另一种就在这两个点之间加一条边,即每个货币兑换处能在两个点之间形成一个环,要使货币增值就是看整个图中有没有正权回路,即Bellman-ford算法的逆运用,将初始货币代表的点到其他点的距离初始化为0,到自己的距离为初始货币数量,有正权回路即能无限松弛。将Bellman-ford算法中判断负权回路的条件和松弛的条件改为小于即可。

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
struct node{
	int p,q;
	double r,c;
}ex[202];
int n,m,s;
double v; 
double dis[101];
int rebellman_ford()
{
	memset(dis,0,sizeof(dis));
	di
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值