(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 最短路径算法可以应用于货币交易领域..._第十二次作业的更多相关文章

  1. Ex 4_10 给定一个有向图G=(V,E),其中边...(bellman-ford算法的应用).._第十二次作业

    在bellman-ford算法中,循环n-1(n为顶点个数)次可以找出从源点到其他顶点的最多n-1条边的最短路径,若循环k次则可以找出从源点到其他顶点的最多k条边的最短路径. package org. ...

  2. 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 G - 免费馅饼

    https://vjudge.net/contest/68966#problem/G 正解一: http://www.clanfei.com/2012/04/646.html #include< ...

  3. 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 F - Piggy-Bank 【完全背包问题】

    https://vjudge.net/contest/68966#problem/F http://blog.csdn.net/libin56842/article/details/9048173 # ...

  4. 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 E - Super Jumping! Jumping! Jumping!

    https://vjudge.net/contest/68966#problem/E http://blog.csdn.net/to_be_better/article/details/5056334 ...

  5. 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 C - Monkey and Banana

    https://vjudge.net/contest/68966#problem/C [参考]http://blog.csdn.net/qinmusiyan/article/details/79862 ...

  6. 【算法系列学习】[kuangbin带你飞]专题十二 基础DP1 B - Ignatius and the Princess IV

    http://www.cnblogs.com/joeylee97/p/6616039.html 引入一个cnt,输入元素与上一个元素相同,cnt增加,否则cnt减少,当cnt为零时记录输入元素,因为所 ...

  7. 算法导论(Introduction to Algorithms )— 第十二章 二叉搜索树— 12.1 什么是二叉搜索树

    搜索树数据结构支持很多动态集合操作,如search(查找).minmum(最小元素).maxmum(最大元素).predecessor(前驱).successor(后继).insert(插入).del ...

  8. Alink漫谈(十二) :在线学习算法FTRL 之 整体设计

    Alink漫谈(十二) :在线学习算法FTRL 之 整体设计 目录 Alink漫谈(十二) :在线学习算法FTRL 之 整体设计 0x00 摘要 0x01概念 1.1 逻辑回归 1.1.1 推导过程 ...

  9. Johnson 全源最短路径算法

    解决单源最短路径问题(Single Source Shortest Paths Problem)的算法包括: Dijkstra 单源最短路径算法:时间复杂度为 O(E + VlogV),要求权值非负: ...

随机推荐

  1. 【转载】RPG颜色参考表

    https://blog.csdn.net/a949308398/article/details/17013087

  2. springboot(十三):springboot结合mybatis generator逆向工程自动生成代码

    错信息generate failed: Exception getting JDBC Driver: com.mysql.jdbc.Driver 上网查了一下,发现原来是generator这个插件在运 ...

  3. ASP.NET MVC 5 笔记

    1.   MVC 的常用特性 1)   System.Web.Mvc.ActionNameAttribute Ø  该特性用于将当前 Action 名称,改为一个指定的 Action 名称,路由匹配时 ...

  4. 4.mycat部署

    1.准备工作 mycat依赖Java环境,所以必须安装jdk yum install java-1.8.0-openjdk-devel.x86_64 配置JAVA_HOME环境变量 ls -lrt / ...

  5. redis整合Spring集群搭建及业务中的使用

    1.redis安装 Redis是c语言开发的. 安装redis需要c语言的编译环境.如果没有gcc需要在线安装.yum install gcc-c++ 安装步骤: 第一步:redis的源码包上传到li ...

  6. postfix 邮箱接收限制

    Postfix 限制 QQ 邮箱发送到 我的 test.com 域下邮箱. 1.编辑 main.cf  添加限制: smtpd_sender_restrictions = check_sender_a ...

  7. QWidget-控件层级关系

    lower()     将控件降低到最底层 raise_()     将控件提升到最上层 label.raise_() a.stackUnder(b)    让a放在b下面 注意:以上操作专指同级控件 ...

  8. hibernate多表操作

    一.表之间的关系 1.一对一 2.一对多 3.多对多 二.表之间关系建表原则 1.一对多:在多的一方创建一个外键,指向一的一方的主键 2.多对多:创建一个中间表,中间表至少有两个字段,分别作为外键指向 ...

  9. Centos 02 操作系统 & Linux安装

    操作系统的概念 操作系统是沟通使用者和硬件之间传递信息的工具或程序,是电子计算机系统负责支撑应用程序运行环境以及用户操作环境的基础系统软件 硬件 ==> 系统核心 ==> 命令解释器she ...

  10. Mysql大文本类型

    TEXT 一个BLOB或TEXT列,最大长度为65535(2^16-1)个字符. MEDIUMTEXT 一个BLOB或TEXT列,最大长度为16777215(2^24-1)个字符. LONGTEXT ...