Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有向图中的圈_Python_Python 3.x_Graph Theory - Fatal编程技术网

Python 有向图中的圈

Python 有向图中的圈,python,python-3.x,graph-theory,Python,Python 3.x,Graph Theory,我正在连接一个函数来检查图形是否包含一个循环 它表示为每个节点所连接的节点的所有索引的列表。节点从1(任务要求)枚举 在检查图形[[2,3]、[4]、[4]、][]时,程序正确地进入第一个列出的节点,但在第二次迭代中,假定adjlist[node-1]是值为3的int而不是数组(或int=2) 我错过了什么 守则: def is_acyclic(adjlist: List, visited: List, path: List) -> bool: ''' :param adj

我正在连接一个函数来检查图形是否包含一个循环

它表示为每个节点所连接的节点的所有索引的列表。节点从1(任务要求)枚举

在检查图形
[[2,3]、[4]、[4]、][]
时,程序正确地进入第一个列出的节点,但在第二次迭代中,假定
adjlist[node-1]
是值为3的
int
而不是数组(或
int=2

我错过了什么

守则:

def is_acyclic(adjlist: List, visited: List, path: List) -> bool:
    '''
    :param adjlist: list representation of a graph; eg: [[2, 3], [], [4], []]
    :param visited: visited nodes
    :param path: visited nodes in current iteration
    :return: the graph does not contain a cycle
    '''

    for node in range(1, len(adjlist)+1):
        if node not in visited:
            visited.append(node)
            path.append(node)

            for child in adjlist[node-1]:
                if child in path:
                        return False
                elif child not in visited:
                    if is_acyclic(adjlist[node-1], visited, path) is False:
                        return False

            path.remove(node)
            return True

这是由于函数正在被递归调用。这部分代码会不断修剪图形邻接列表:

        elif child not in visited:
            if is_acyclic(adjlist[node-1], visited, path, level=level + 1) is False:
                return False
第一次邻接列表是:

[[2, 3], [], [4], []]
并且
adjlist[node-1]
[2,3]

第二次环绕邻接列表是:

[2, 3]
并且
adjlist[node-1]
3

因为2已经在访问中,所以节点实际上会增加到2。因此,您可以看到:

 adjlist[node-1] == adjlist[2-1] == adjlist[1] == 3