小编Max*_*Max的帖子

使用 Python 的“哈密尔顿”路径

我正在尝试使用 Python 实现遍历所有图顶点的任意路径(不一定是循环)的递归搜索。这是我的代码:

def hamilton(G, size, pt, path=[]):
    if pt not in set(path):
        path.append(pt)
        if len(path)==size:
            return path
        for pt_next in G[pt]:
            res_path = [i for i in path]
            hamilton (G, size, pt_next, res_path)
Run Code Online (Sandbox Code Playgroud)

这里,pt是起点,path是之前遍历过的所有顶点的列表,不包括pt,默认为空。问题是,每当找到这样的路径时,返回语句都会引用过程的某些内部调用,因此程序不会终止或返回该路径。

例如,获取G = {1:[2,3,4], 2:[1,3,4], 3:[1,2,4], 4:[1,2,3]}(即完整的 4 图)并运行hamilton(G,4,1,[])。它返回None,但如果您打印路径而不是将其作为值返回,您会发现它实际上找到了从 1 开始的所有六个路径。

如果我告诉程序将路径与 return 语句一起打印,它最终会打印所有此类路径,因此运行时间比需要的时间长得多。

如何修复代码,以便在找到第一个合适的路径后终止执行?

python recursion backtracking recursive-backtracking

3
推荐指数
1
解决办法
2万
查看次数