不剪枝要走多少个结点

👁️ 0 人浏览 💬 0 人评论 ❤️ 添加收藏

把 1 到 5 排成一排,要求挨着的两个不能是连号。这个版本先把 5 个位置全排满,最后才检查。运行它,看走过了多少个结点:

def naive(n):
    st = {"c": 0, "v": 0}
    path = []
    used = [False] * (n + 1)
    def dfs():
        st["v"] += 1
        if len(path) == n:
            for i in range(n - 1):
                if abs(path[i] - path[i + 1]) == 1:
                    return
            st["c"] += 1
            return
        for x in range(1, n + 1):
            if used[x]:
                continue
            used[x] = True
            path.append(x)
            dfs()
            path.pop()
            used[x] = False
    dfs()
    return st["c"], st["v"]

print(naive(5)[1])
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论