牛客每日一题系列-001

牛客 23486 小A与小B

方法1:BFS

from collections import deque
from typing import List

def bfs(pos: tuple, direction: int) -> List[List[int]]:
    ans = [[MAX] * M for _ in range(N)]
    vis = [[False] * M for _ in range(N)]
    queue = deque(); queue.append((pos, 0)); vis[pos[0]][pos[1]] = True
    while queue:
        (x, y), time = queue.popleft(); ans[x][y] = time
        for i in range(direction):
            dx, dy = x + directions[i][0], y + directions[i][1]
            if 0 <= dx < N and 0 <= dy < M and maze[dx][dy] != '#' and not vis[dx][dy]:
                queue.append(((dx, dy), time + 1)); vis[dx][dy] = True
    return ans

MAX = 10 ** 6
directions = [(-1, 0), (1, 0), (0, -1), (0, 1), (-1, -1), (-1, 1), (1, -1), (1, 1)]
N, M = map(int, input().split())
maze = [list(input().split()) for _ in range(N)]
posA, posB = (0, 0), (0, 0)
for i in range(N):
    for j in range(M):
        if maze[i][j] == 'C':
            posA = (i, j)
        elif maze[i][j] == 'D':
            posB = (i, j)

ans1, ans2, res = bfs(posA, 8), bfs(posB, 4), MAX
for i in range(N):
    for j in range(M):
        res = min(res, max(ans1[i][j], (ans2[i][j] + 1) // 2))
print("NO" if res == MAX else "YES\n" + str(res))
posted @   Koonan-Edogawa  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示