首页 > 编程语言 >套汇问题 Python实现,算法设计,DFS深度遍历

套汇问题 Python实现,算法设计,DFS深度遍历

时间:2022-11-05 21:44:28浏览次数:47  
标签:遍历 Python 路径 DFS start values param rates path

# P67


# 套汇问题可以理解为一个有向图找出环的问题,
# 要想有盈利,需要所有的汇率乘积大于1
# 在贪心条件下,找到一个环路径上的乘积大于1就有套汇的可能性


"""
# 输入一个汇率表

    b1 b2 b3 b4
b1   k11  k12 k13 k14
b2   k21 k22 k23 k24
b3   k31 k32 k33 k34
b4   k41 k42 k43 k44

所有不支持兑换的币种均设置为 -1 ,
同币种设置为 -1,不考虑同币种之间的兑换
"""


def path_values(rates_, now_rate, path):
    """

    :param rates_: 利率表
    :param now_rate: 累乘的利率
    :param path: 兑换路径,连续两个表示一条路线
    :return:
    """
    if len(path) >= 2:
        return path_values(rates_, now_rate * rates_[path[0]][path[1]], path[1:])
    else:
        return now_rate


def find_path(rates_, path, start):
    """

    :param rates_: 利率表
    :param path: 路径
    :param start: 路径中最后一个起始点
    :return:
    """
    from copy import deepcopy
    path = deepcopy(path)

    if start in path:
        # 生成一条兑换路径并计算汇率
        path.append(start)
        values = path_values(rates_, 1, path)
        if values > 1:
            print(path, values)
            return
            # exit()  # 仅适用于IDE 环境
    path.append(start)
    # 如果这个可能的起始点不在路径中则加入路径中
    for i in range(len(rates_)):
        # 根据最后一个起始点继续寻找路径遍历表
        if rates_[start][i] > 0:
            find_path(rates_, path, start=i)


def find_values(rates_):
    for i in range(len(rates_)):
        find_path(rates_, [], i)


rates = [[-1, 0.7, -1],
         [-1, -1, 9.5],
         [0.16, -1, -1]]

find_values(rates)

输出

[0, 1, 2, 0] 1.0639999999999998
[1, 2, 0, 1] 1.0639999999999998
[2, 0, 1, 2] 1.0639999999999998

标签:遍历,Python,路径,DFS,start,values,param,rates,path
From: https://www.cnblogs.com/boran/p/16861406.html

相关文章

  • Python的列表推导式
    你一定听过这样一个说法,尽量使用列表推导式,而不是用list.append方法来初始化一个列表,那么究竟为何列表推导式会更快呢?这是因为,列表推导式被编译后的字节码执行速度更快。py......
  • PyTorch笔记:Python中的state_dict是啥
    来自:https://pytorch.org/tutorials/recipes/recipes/what_is_state_dict.html在PyTorch中,可学习的参数都被保存在模型的parameters中,可以通过model.parameters()访问......
  • Python 爬虫之多进程
    网络爬虫(又被称为网页蜘蛛,网络机器人,在FOAF社区中间,更经常的称为网页追逐者),是一种按照一定的规则,自动地抓取万维网信息的程序或者脚本。另外一些不常使用的名字还有蚂蚁、......
  • 数据结构 图的遍历(广度优先遍历、深度优先遍历)
    8.6、图的广度优先遍历找到与顶点相邻的所有顶点,标记哪些顶点被访问过需要一个辅助队列#include<stdio.h>#include<stdlib.h>#include<math.h>#defineMaxSiz......
  • python函数
    python函数函数啊函数多解决问题,踩的坑多了,就有经验了函数作用:以功能(完成一件事)为导向的代码块,一个函数就是一个功能.随调随用,不用不调减少代码重复性,增强......
  • 105. 从前序与中序遍历序列构造二叉树
    给定两个整数数组 preorder 和 inorder ,其中 preorder 是二叉树的先序遍历, inorder 是同一棵树的中序遍历,请构造二叉树并返回其根节点。示例1:  输入:pre......
  • 极客编程python入门-字典与SET
    dictPython内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度d={'python':7,"java":234,'go':3,123:567}print(d)p......
  • 【python】pycharm打开时一直加载中怎么办 ?
    前言大家早好、午好、晚好吖~问题描述相信很多刚开始使用pycharm不太熟练的小伙伴,每天一开机打开pycharm总是卡半天,不知道的还以为是电脑卡了或者啥问题的。莫慌,其实......
  • 运行python脚本报错:selenium.common.exceptions.SessionNotCreatedException: Message
    运行python脚本报错:selenium.common.exceptions.SessionNotCreatedException:Message:sessionnotcreated        原因:ChromeDriver版本与浏览器版本不......
  • Codeforces Round #826 (Div. 3) D. Masha and a Beautiful Tree(树+dfs)
    D.MashaandaBeautifulTree题目大意:给定一颗满二叉树的叶子节点,让我们更换子树位置,从而让叶子节点排序为升序求最小操作数,如果不能移动成那样的话,直接输出-1.in......