(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. 对空间数据(Shape)重新排序

    打开ArcToolBox,数据管理工具->常规(General)->排序

  2. sql 左右连接 on 之后的and 和where的区别

  3. firefox 播放h5爱奇艺视频

    先安装 violentmonkey 扩展(https://addons.mozilla.org/zh-CN/firefox/addon/violentmonkey/), 在安装这个脚本 https:/ ...

  4. 2017-2018-2 165X 『Java程序设计』课程 团队项目备选题目

    2017-2018-2 165X 『Java程序设计』课程 团队项目备选题目 结合本课程时间安排,以及同学们的专业和课程内容,制定了以下六个题目供各小组选择.如有其他项目方案设想,可自行与老师沟通.老 ...

  5. TCC

    严格遵守ACID的分布式事务我们称为刚性事务,而遵循BASE理论(基本可用:在故障出现时保证核心功能可用,软状态:允许中间状态出现,最终一致性:不要求分布式事务打成中时间点数据都是一致性的,但是保证达 ...

  6. zabbix系列 ~ 报警模式

    一 简介:聊聊zabbix的报警方式二 报警方式 邮件,短信,钉钉,微信三 准备    需要预选准备好对应报警方式的脚本四 web端设置  1 设置报警方式 2 设置报警触发器    1 选择报警信息 ...

  7. 实现Comet(服务器推送)的两种方式:长轮询和http流

    Comet 是一种高级的Ajax技术,实现了服务器向页面实时推送数据的技术,应用场景有体育比赛比分和股票报价等. 实现Comet有两种方式:长轮询与http流 长轮询是短轮询的翻版,短轮询的方式是:页 ...

  8. Redis protected-mode属性解读

    redis3.2版本后新增protected-mode配置,默认是yes,即开启.设置外部网络连接redis服务,设置方式如下: 1.关闭protected-mode模式,此时外部网络可以直接访问 2 ...

  9. 20165337岳源 预备作业3:Linux安装及命令入门

    安装虚拟机 按照基于VirtualBox虚拟机安装Ubuntu图文教程的步骤安装虚拟机,遇到的问题通过同学的帮助也得到了解决.例如:虚拟机无法选择64位系统. 常用的Linux命令 Tab 补全命令. ...

  10. springboot配置server相关配置&整合模板引擎Freemarker、thymeleaf&thymeleaf基本用法&thymeleaf 获取项目路径 contextPath 与取session中信息

    1.Springboot配置server相关配置(包括默认tomcat的相关配置) 下面的配置也都是模板,需要的时候在application.properties配置即可 ############## ...