具有任意起始位置的Python中的哈密顿路径



我目前在业余时间做一个项目,我需要检查图中是否存在哈密顿路径,但是,路径的起点和终点并不重要,只有一个存在于图中。

从另一个用户那里复制了下面的代码:

def hamilton(graph, start_v):
size = len(graph)
to_visit = [None, start_v]
path = []
while(to_visit):
v = to_visit.pop()
if v : 
path.append(v)
if len(path) == size:
break
for x in set(graph[v])-set(path):
to_visit.append(None)
to_visit.append(x)
else:
path.pop()
return path

显然有一个参数表示起始值。现在我的第一反应是迭代这个函数并对每个起始顶点运行它,但因为我要在有100多个顶点的图上运行它,所以运行到完成需要很长时间。我不需要知道通过所有顶点的路径是什么,我只需要知道有一个存在,如果有帮助的话

我如何调整它来给出一个任意的起始位置?

可以插入新的"start"顶点到图中,每个顶点都有边,然后搜索从这个起点开始的哈密顿路径。顶点。如果找到一条路径,那么只要删除"开始",就表示在原始图中存在一条路径。顶点从路径的起点;反之,如果原图中存在一条从任意顶点出发的哈密顿路径,则新图中也会有一条从"起始点"开始的哈密顿路径。顶点。

也就是说,这并不比每个起始顶点调用一次现有算法更有效,因为你的算法无论如何都是通过暴力破解的。

最新更新