问题 D: 货币套汇(图路径)-- Guard
题目描述
套汇是指利用货币汇兑率的差异将一个单位的某种货币转换为大于一个单位的同种货币。例如,假定1 美元可以买0.7 英镑,1 英镑可以买9.5 法郎,1法郎可以买到0.16美元。通过货币兑换,一个商人可以从1 美元开始买入,得到0.7×9.5×0.16=1.064美元,从而获得6.4%的利润。 给定n种货币c1 ,c2 ,... ,cn的有关兑换率,试设计一个有效算法,确定货币间是否存在套汇的可能性。
提示:判断图上是否出现正环,即环上所有的边相乘大于1
输入
第一行:测试数据组数
每组测试数据格式为:
第一行:正整数n (1< =n< =30),正整数m,分别表示n种货币和m种不同的货币兑换率。
2~n+1行,n种货币的名称。
n+2~n+m+1行,每行有3 个数据项ci,rij 和cj ,表示货币ci 和cj的兑换率为 rij。
输出
对每组测试数据,如果存在套汇的可能则输出YES
如果不存在套汇的可能,则输出NO。
样例输入
2
3 3
USDollar
BritishPound
FrenchFranc
USDollar 0.5 BritishPound
BritishPound 10.0 FrenchFranc
FrenchFranc 0.21 USDollar
3 6
USDollar
BritishPound
FrenchFranc
USDollar 0.5 BritishPound
USDollar 4.9 FrenchFranc
BritishPound 10.0 FrenchFranc
BritishPound 1.99 USDollar
FrenchFranc 0.09 BritishPound
FrenchFranc 0.19 USDollar
样例输出
YES
NO
参考代码
#include <iostream>
using namespace std;class Graph
{
private:int vexNum;string* vex;double** matrix;public:Graph();~Graph();int index(string s);void floyd();void show();
};Graph::Graph()
{int i, j;cin >> vexNum; //输入顶点个数//初始化vex = new string[vexNum];matrix = new double* [vexNum];for (i = 0; i < vexNum; i++)matrix[i] = new double[vexNum];double N = 65535;for (i = 0; i < vexNum; i++)for (j = 0; j < vexNum; j++)matrix[i][j] = 0; //让所以边的权重初始化为0int m;cin >> m; //输入边的数量for (i = 0; i < vexNum; i++)cin >> vex[i]; //输入顶点名称for (i = 0; i < m; i++){string s1, s2;double rate;cin >> s1 >> rate >> s2; //输入两个顶点的边的权重matrix[index(s1)][index(s2)] = rate;}
}void Graph::floyd()
{for (int k = 0; k < vexNum; k++)for (int i = 0; i < vexNum; i++)for (int j = 0; j < vexNum; j++){//如果从 i 到 k 再从 k 到 j 有路径且路径权重大于 i 到 j 的(或大于0)if ((matrix[i][k] * matrix[k][j]) > matrix[i][j])//让 i 到 j 的路径权重为 i 到 k 再到 j 的权重matrix[i][j] = matrix[i][k] * matrix[k][j];if (matrix[i][j] != 0 && i == j && matrix[i][j] > 1){//如果 i 等于 j 且权重不为 0 则图中有环形成//且如果环上所有的边相乘大于1cout << "YES" << endl;return;}}cout << "NO" << endl;
}int Graph::index(string s)
{for (int i = 0; i < vexNum; i++)if (vex[i] == s)return i;return -1;
}void Graph::show()
{//查看各个货币直接的转换汇率for (int i = 0; i < vexNum; i++){for (int j = 0; j < vexNum; j++)cout << "(" << vex[i] << "-->" << vex[j] << ":" << matrix[i][j] << ")";cout << endl;}
}int main()
{int t;cin >> t;while (t--){Graph* myGraph = new Graph();myGraph->floyd();//myGraph->show(); }return 0;
}
问题 D: 货币套汇(图路径)-- Guard相关推荐
- 问题 E: 货币套汇
问题 E: 货币套汇 题目描述 套汇是指利用货币汇兑率的差异将一个单位的某种货币转换为大于一个单位的同种货币.例如,假定1 美元可以买0.7 英镑,1 英镑可以买9.5 法郎,1法郎可以买到0.16美 ...
- vue 打包css路径不对_vue项目打包后css背景图路径不对的问题
问题描述: 自己在自学vue做项目的过程中,遇到一个有关背景图片路径的问题,就是css代码中背景图片是根据相对路径来写的,如下图: 当使用npm run dev命令本地访问的时候,背景图片是正常显示的 ...
- maya导入arnold代理ass文件后,无法修改ass内贴图路径问题的解决方法
一.问题描述 最近遇到了maya模型standIn方式导入arnold .ass格式后,贴图内部路径不对,无法在maya中直接修改的问题,而ass文件是很大文本格式数据.maya中没有现成的工具显示a ...
- 3ds Max导出OBJ的mtl贴图路径不正确
文章目录 3DSMax导出的材质mtl文件漫反射贴图路径不正确 之前流程是写了一个3DSMAX插件把游戏的场景直接导出为自己定义的格式的文件,包含了顶点数据,三角形数据,贴图数据等.现在把插件从3DM ...
- maya贴图路径重新设定
导入模型,贴图路径不对怎么办,总不能一个个材质球再设置路径吧,谷歌找到答案啦 https://forums.autodesk.com/t5/maya-shading-lighting-and/chan ...
- 货币套汇(图路径)【数据结构-深度优先搜索-回路】
这题感觉有点小难(估计还是我太菜 题目描述 套汇是指利用货币汇兑率的差异将一个单位的某种货币转换为大于一个单位的同种货币.例如,假定1 美元可以买0.7 英镑,1 英镑可以买9.5 法郎,1法郎可以买 ...
- 货币套汇(图路径)-- 数据结构 (深搜+Floyd算法)
深搜+Floyd算法 深搜 Floyd算法 题目描述 套汇是指利用货币汇兑率的差异将一个单位的某种货币转换为大于一个单位的同种货币. 例如,假定1 美元可以买0.7 英镑,1 英镑可以买9.5法郎,1 ...
- 洛谷 - P2762 太空飞行计划问题(最大权闭合图+路径打印)
题目链接:点击查看 题目大意:给出n个实验,每个实验完成之后都可以得到一定的奖金,但每个实验需要特殊的器械才可以完成,准备器械又需要一定的支出,现在问如何选择实验才能让利润最大化,并输出需要选择的实验 ...
- android手机存储空间划分及压图路径选取
通过360手机助手图示,我们可以很清楚地看到整个手机存储空间分成三块: 各目录结构图如下: 通过手机自身查看,如图: 图中的16G指的是:system分区+cache分区+recovery分区+d ...
最新文章
- 再见了月薪3w的大后端,低代码开发已成气候!
- 机器学习基础-数据降维
- php判断一个数是否是回文数,每周一道算法题001:回文数
- 机器学习入门:线性回归及梯度下降
- 解决ScrollView嵌套ViewPager出现的滑动冲突问题
- 16位灰度数据成像_16位 250M双通道PCI数据采集卡 FCFR-PCI9808
- python3基础知识_python3基础知识梳理
- elasticdump elasticsearch数据备份与迁移 导入导出
- 存储池与存储卷,使用virt-install创建虚拟机
- 如何改变对话或窗体视窗的背景颜色
- 一起学习C语言:数组(二)
- 数据绑定表达式语法(Eval,Bind区别)
- eureka默认端口号是多少_从eureka报错中得知的默认配置
- java高级工程师哪些技术要掌握?
- 唐宇迪学习笔记6:线性回归算法原理推导
- HTML5全套视频教程合集分享-2018年千锋最新录制
- 虚拟机VMware下载与安装教程(windows)
- pod容器发生OOM错误(by quqi99)
- 创建主键报错:Incorrect column specifier for column ‘id‘
- 硬盘更换电脑后开机解决办法
热门文章
- system.exit(0) system.exit(1) 含义与区别
- 怎样判断你长得像哪位明星人物?
- 百练 openjudge 开餐馆(动态规划)
- Problem L 求m到n之和 C语言函数
- 在微信公众号接入人工智能(开始)
- livecharts中仪表盘_ECharts仪表盘
- Android-自动化测试之MonkeyRunner教程(详细)
- android (7)
- Why Good Managers Make Bad Decisions
- 频繁默认网关不可用_win10系统默认网关不可用频繁掉线的具体方法