Python 简单DAG中的哈密顿路径
我试图在一个简单的DAG中实现哈密顿路径的递归搜索。以下是我的玩具数据和代码: 边缘列表格式的DAGPython 简单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)
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)
就得到了预期的结果。这对于简单的图来说是可行的。但对于具有数十个顶点和数百条边的图,它不起作用。我必须循环通过每个顶点,然后选择路径。奇怪的事情发生了。即使对于这个简单的图,如果在所有顶点之间循环,结果也是不同的。