• 算法88---图的遍历


    一、题目:解题报告,连除----399

    已经给出了某些变量的比值,求新的变量的比值。如果这个变量没有出现过,或者不可到达,那么返回-1.

     

    DFS思路: 

     

    题目中给了顶点和顶点之间的关系,其实就是制定了这个图的样子。然后要求的新的比值其实就是从一个顶点到达另外一个顶点的路径,并且把这条路径上所有的权重相乘。

     

    注意,如果a/b=3,那么从a到b是3,那么从b到a是1/3.

     

    既然是从一个顶点出发到达另外一个顶点,所以应该是dfs解决的问题。
    原文:https://blog.csdn.net/fuxuemingzhu/article/details/82591165

     

      1、建立图  {a:{b : 2.0} 、b:{a:1 /2.0,c:3.0}、c:{b:1/3.0}}

      2、不在图中则返回-1  

      3、在图中,x == y,返回1,x != y,返回x到y的拓扑排序的权重相乘值。

    代码:

      

    from collections import defaultdict
    def solveque(arr ,values , que):
        if not arr:
            return [-1] * len(que)
        if not que:
            return []
        graph = defaultdict(dict)
        for (x,y) , value in zip(arr,values):
            graph[x][y] = value
            graph[y][x] = 1/value if value else 0
        for x,y in que:
            if x in graph and y in graph:
                return dfs(graph,x,y,set())
            else:
                return -1.0
    def dfs(graph,x,y,visited):
        if x == y:
            return 1.0
        visited.add(x)
        for k in graph[x]:
            if k in visited:continue
            visited.add(k)
            d = dfs(graph,k,y,visited)
            if d > 0:
                return d*graph[x][k]
        return -1.0
    arr = [['a','b'],['b','c']]
    values = [2.0,3.0]
    que = [['a','c'],['a','v']]
    print(solveque(arr ,values , que))

     

  • 相关阅读:
    $(window).scrollTop()与$(dom).offset().top
    组织结构图
    杀人游戏
    猜数字游戏
    变量
    2018 -11-23 快捷键
    iOS开发—c语言 ATM取款机(全)2018-11-15
    iOS开发—c语言 ATM取款机(一)
    ios开发学习c语言第一天 2018-11-13
    iOS 面试题
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/10501440.html
Copyright © 2020-2023  润新知