验证给定路径并查找无向和未加权图形中的有效路径总数

时间:2016-02-04 11:29:02

标签: python validation graph depth-first-search

我在这篇文章中附有一个非定向和未加权的图表。您只能在每个边上遍历此图表一次。没有重复。挑战是编写一个程序,将给定字符串上的路径验证为有效或无效路径。并且还要查找从一个点到另一个点的所有有效路径的数量。

E.g。有效路径:

  • ABCDE
  • ABDE
  • ABCDBCDBCDE
  • ABCDBDE

E.g。对于无效路径:

  • ABE
  • ABA
  • ABCDBCDBCDBCDBCDE

从A到B的可能路径数:1 从A到E的可能路径数:2501

这是我在编程面试时遇到的问题。我知道使用下面的python代码验证给定的字符串:

# Adjacent Graph vertices with number of paths between those vertices
route_counter_config ={
    ('A', 'B'): 1,
    ('B', 'C'): 3,
    ('B', 'D'): 2,
    ('C', 'D'): 3,
    ('D', 'E'): 1,
}

# Below dict keeps same keys as above dict but updates count while validating
input_route_counter = {}

def reset_input_route_counter():
    """
    Resets counter for all the edges.
    """
    for key in route_counter_config.keys():
        input_route_counter[key] = 0

def valid_route(route):
    reset_input_route_counter()
    for i in range(len(route) - 1):
        # Grab current and next vertice in user input and make sorted tuple of it to match the keys set in dict.
        adjacent_route = tuple(sorted(route[i]+route[i+1])) 
        try:
            input_route_counter[adjacent_route] += 1
        except KeyError:
            # if edge is invalid
            return False
        else:
            # When number of possible path crosses the limit
            if input_route_counter[adjacent_route] > route_counter_config[adjacent_route]:
                return False
    return True

# valid paths
valid_route("ABC")
valid_route("ABCDBCDBCDE")

# invalid paths
valid_route("ABA")
valid_route("AE")

但不知道如何找到路径数量。可以将DFS用于在相邻顶点之间具有最多一条边的顶点。但是如何解决这样的多路径图?

注意: 数学和计算机图形理论在答案中受到欢迎,但我最好寻找一个python解决方案。我已经与cstheory和math stackexhange网站进行了交叉检查。但是我不能从给定的算法创建python代码,因为我在数学方面很弱。我也没有找到类似的图形问题。我只在这些网站中找到了与单图表相关的问题。

Undirected graph

0 个答案:

没有答案