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))

     

  • 相关阅读:
    松软科技web课堂:SQLServer之ROUND() 函数
    松软科技web课堂:SQLServer之LEN() 函数
    接口工具比较
    记录EXCEL格式和TXT文本格式之间的互转
    Fiddler安装证书
    Nginx概述及安装配置
    YSLOW(一款实用的网站性能检测工具)
    通用测试用例大全
    Macaca环境配置及样例执行
    ADB命令
  • 原文地址:https://www.cnblogs.com/Lee-yl/p/10501440.html
Copyright © 2011-2022 走看看