import sys


def dfs(x, y, ans, num):
    global Min
    if num == n:
        if Min > ans:
            Min = ans
        return
    for i in range(n):
        if vis[i]:
            continue
        if ans >= Min:
            return
        vis[i] = True
        dfs(ll[i][0], ll[i][1], ans + abs(x - ll[i][0]) + abs(y - ll[i][1]), num + 1)
        vis[i] = False


X, Y = map(int, sys.stdin.readline().strip().split())
n = int(sys.stdin.readline().strip())
ll = [tuple(map(int, sys.stdin.readline().strip().split())) for _ in range(n)]
vis = [False] * n
Min = float('inf')
dfs(X, Y, 0, 0)
print(Min)

py太慢了,必须剪枝才能过(测试点3非剪枝8s剪枝0.16s)

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐