Ex4_21 最短路径算法可以应用于货币交易领域..._第十二次作业

(a) 建立一个有向图G(V,E),每个顶点表示一种货币,两个顶点之间的边权的大小ex[u][v]表示两种货币之间的汇率,若要找一个最有利的兑换序列,把货币s兑换成货币t,即在若干种兑换序列中选择一条合适的兑换序列,将等量货币s尽可能多的兑换货币t,令money[x]表示一个s币可以兑换多少个x币。初始时令money[s]=1,money[x]=0.利用bellman-ford算法,修改算法中的update过程如下
do for each edge (u, v) ∈ E[G]
if(money[v]<money[u]*ex[u][v])
money[v]=money[u]*ex[u][v]
如果不存在异常情形,则兑换的最长路径最多有n-1条边(n为货币的种数).
(b) 若存在异常情形,则在求得最多n-1条边的基础上再进行依次update操作,某个顶点的money一定增加。
package org.xiu68.ch04.ex12;
public class Ex4_21 {
public static void main(String[] args) {
// TODO Auto-generated method stub
double max=10000000;
double[][] edges=new double[][]{
{1,10,5,3},
{0.05,1,0,5},
{0.1,0,1,2},
{0.01,0.15,0.1,1}
};
MGraph1 m1=new MGraph1(edges);
m1.bellmanFord(0, 3);
//输出
/*
1个第0种货币最多可以兑换50.0个第3种货币
不存在异常情况
*/
double[][] edges1=new double[][]{
{1,10,5,3},
{0.05,1,0,5},
{0.1,0,1,2},
{0.2,0.15,0.1,1}
};
MGraph1 m2=new MGraph1(edges1);
m2.bellmanFord(0, 3);
//输出
/*
1个第0种货币最多可以兑换5000.0个第3种货币
存在异常情况
*/
}
}
class MGraph1{
private double[][] edges; //有向图边集
private int vexNum; //顶点数目
private double[] money; //money[i]表示用一个s币可以兑换多少i币
public MGraph1(double[][] edges){
this.edges=edges;
this.vexNum=edges.length;
this.money=new double[vexNum];
}
public void bellmanFord(int s,int t){
//初始化money数组
for(int i=0;i<vexNum;i++){
money[i]=0;
}
money[s]=1;
for(int i=1;i<vexNum;i++){ //从源点到任何一个顶点最多有vexNum条边的最短路径
boolean flag=false; //记录在本次循环中从源点到某个顶点是否有更短的路径
//遍历所有的边
for(int j=0;j<vexNum;j++){
for(int k=0;k<vexNum;k++){
if(edges[j][k]!=0 && money[k]<money[j]*edges[j][k]){
money[k]=money[j]*edges[j][k];
flag=true;
}
}
}
if(flag==false) //已经求得所有顶点最多edgeNum条边的最短路径
break;
}
System.out.println("1个第"+s+"种货币最多可以兑换"+money[t]+"个第"+t+"种货币");
boolean flag=false;
for(int i=0;i<vexNum;i++){
for(int j=0;j<vexNum;j++){
if(Math.abs(edges[i][j])!=0 && money[j]<money[i]*edges[i][j]){
flag=true;
}
}
}
if(flag==false)
System.out.println("不存在异常情况");
else
System.out.println("存在异常情况");
System.out.println();
}
}
Ex4_21 最短路径算法可以应用于货币交易领域..._第十二次作业的更多相关文章
- Ex 4_10 给定一个有向图G=(V,E),其中边...(bellman-ford算法的应用).._第十二次作业
在bellman-ford算法中,循环n-1(n为顶点个数)次可以找出从源点到其他顶点的最多n-1条边的最短路径,若循环k次则可以找出从源点到其他顶点的最多k条边的最短路径. package org. ...
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 G - 免费馅饼
https://vjudge.net/contest/68966#problem/G 正解一: http://www.clanfei.com/2012/04/646.html #include< ...
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 F - Piggy-Bank 【完全背包问题】
https://vjudge.net/contest/68966#problem/F http://blog.csdn.net/libin56842/article/details/9048173 # ...
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 E - Super Jumping! Jumping! Jumping!
https://vjudge.net/contest/68966#problem/E http://blog.csdn.net/to_be_better/article/details/5056334 ...
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 C - Monkey and Banana
https://vjudge.net/contest/68966#problem/C [参考]http://blog.csdn.net/qinmusiyan/article/details/79862 ...
- 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 B - Ignatius and the Princess IV
http://www.cnblogs.com/joeylee97/p/6616039.html 引入一个cnt,输入元素与上一个元素相同,cnt增加,否则cnt减少,当cnt为零时记录输入元素,因为所 ...
- 算法导论(Introduction to Algorithms )— 第十二章 二叉搜索树— 12.1 什么是二叉搜索树
搜索树数据结构支持很多动态集合操作,如search(查找).minmum(最小元素).maxmum(最大元素).predecessor(前驱).successor(后继).insert(插入).del ...
- Alink漫谈(十二) :在线学习算法FTRL 之 整体设计
Alink漫谈(十二) :在线学习算法FTRL 之 整体设计 目录 Alink漫谈(十二) :在线学习算法FTRL 之 整体设计 0x00 摘要 0x01概念 1.1 逻辑回归 1.1.1 推导过程 ...
- Johnson 全源最短路径算法
解决单源最短路径问题(Single Source Shortest Paths Problem)的算法包括: Dijkstra 单源最短路径算法:时间复杂度为 O(E + VlogV),要求权值非负: ...
随机推荐
- Web服务常见问题
1. 资源无法找到 ,用58225端口发布服务的时候,没法找到 那么就换一个端口试试.http://localhost:58272/ 2. could not load file or assembl ...
- C++使用libcurl
1.下载地址https://curl.haxx.se/download.html 2.选择zip压缩包下载 3.选择合适自己的vc版本 4.启动项目选择libcurl 5.因为暂时不需要ssh2,预处 ...
- [设计模式] javascript 之 命令模式
模式定义: [定义]: 将一个请求封装成一个对象,使得你用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能. 组成: 调用者(Invoker),命令请求(Comman ...
- matplotlib-形状
需要 import matplotlib.patches as mp import numpy as np import matplotlib.pyplot as plt import matpl ...
- AttributeError: module '__main__' has no attribute 'main'解决方法
在终端运行.py文件时报错:AttributeError: module '__main__' has no attribute 'main' 原因:在PyCharm里运行python程序需要添加 i ...
- 【Vue】定义组件 data 必须是一个函数返回的对象
Vue 实例的数据对象.Vue 将会递归将 data 的属性转换为 getter/setter,从而让 data 的属性能够响应数据变化.对象必须是纯粹的对象 (含有零个或多个的 key/value ...
- 将web项目导入到eclipse中常见错误
将web项目导入到eclipse中常见错误 错误1:string cannot be resolved to a type 原因:这种情况一般是因为你的JDK版本没有设置好,或者设置的有不一致的 ...
- LOJ #2058「TJOI / HEOI2016」求和
不错的推柿子题 LOJ #2058 题意:求$\sum\limits_{i=0}^n\sum\limits_{j=0}^nS(i,j)·2^j·j!$其中$ S(n,m)$是第二类斯特林数 $ Sol ...
- Python 14 Html 基础
内容概要 html静态页面,标签介绍 HTML简述 定义: HTML,超文本标记语言,写给浏览器的语言,目前网络上应用最广泛的语言.HTML也在不断的更新,最新版本已经出现了HTML5.在HTML5中 ...
- Exception:两个类具有相同的 XML 类型名称,请使用 @XmlType.name 和 @XmlType.namespace 为类分配不同的名称
具体报错: 找到报错的类: 对XmlType重新命名(最简单粗暴的方法):