Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/facebook/9.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 简单DAG中的哈密顿路径_Python_Directed Acyclic Graphs_Hamiltonian Path - Fatal编程技术网

Python 简单DAG中的哈密顿路径

Python 简单DAG中的哈密顿路径,python,directed-acyclic-graphs,hamiltonian-path,Python,Directed Acyclic Graphs,Hamiltonian Path,我试图在一个简单的DAG中实现哈密顿路径的递归搜索。以下是我的玩具数据和代码: 边缘列表格式的DAG 4 5 1 2 3 1 3 2 4 3 4 2 转换后的字典格式的DAG {1: [2], 3: [1, 2], 4: [3, 2]} 代码:G是图,size是图中的顶点数,v是当前顶点,v_next是相邻顶点 def hamilton(G, size, v, path=[]): if v not in set(path): path.append(v)

我试图在一个简单的DAG中实现哈密顿路径的递归搜索。以下是我的玩具数据和代码:

边缘列表格式的DAG

4 5
1 2
3 1
3 2
4 3
4 2
转换后的字典格式的DAG

{1: [2], 3: [1, 2], 4: [3, 2]}
代码:G是图,size是图中的顶点数,v是当前顶点,v_next是相邻顶点

def hamilton(G, size, v, path=[]):
    if v not in set(path):  
        path.append(v)
        if len(path) == size:
            return path
        for v_next in G.get(v, []):
            cur_path = [i for i in path]
            result = hamilton(G, size, v_next, cur_path)
            if result is not None:  
                return result
    else:
        print('')
当我循环通过顶点(从1到4)并在每个循环处运行函数时,结果有点奇怪

for vertex in range(1, v+1):
    result = hamilton(graph, v, vertex)
    print(result)

None
None
None
[1, 2, 3, 4]

我希望从4开始时的结果是[4,3,1,2]。前面提到的一篇文章是因为“可变默认参数”的问题。但我不知道如何解决这种情况。有什么提示吗?

您确定发布了正确的代码吗?当我运行代码时,路径是
[4,3,1,2]
,正如预期的那样。你到底在印刷什么?你能添加打印的代码吗?你循环了所有的顶点吗?还是你4点才开始?我加上了印刷品code@DanielJunglasI只要运行
path=hamilton(G,4,4)
就得到了预期的结果。这对于简单的图来说是可行的。但对于具有数十个顶点和数百条边的图,它不起作用。我必须循环通过每个顶点,然后选择路径。奇怪的事情发生了。即使对于这个简单的图,如果在所有顶点之间循环,结果也是不同的。