zoukankan      html  css  js  c++  java
  • 算法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))

     

  • 相关阅读:
    STL源代码剖析(二)
    局域网部署docker--从无到有创建自己的docker私有仓库
    Leetcode Add two numbers
    GDIPlus绘制桌面歌词
    Android中apk动态载入技术研究(2)android插件化及实现
    jq 地区(省市县区)联动菜单
    System.Diagnostics.Process.Start的妙用
    aaaa
    RESTful Web 服务:教程
    芒果TV 视频真实的地址获取
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/10501440.html
Copyright © 2011-2022 走看看