贴一个python的代码,基本思路都是双向 BFS

import sys
from collections import deque
input = lambda: sys.stdin.readline().rstrip('\r\n')
mii = lambda: map(int, input().split())
lmii = lambda: list(map(int, input().split()))
li = lambda: list(input().split())

m, n = mii()
grid = [['']*n for _ in range(m)]
for i in range(m):
    grid[i] = li()
xc, yc, xd, yd = 0, 0, 0, 0
for i in range(m):
    for j in range(n):
        if grid[i][j] == 'C': xc, yc = i, j
        elif grid[i][j] == 'D': xd, yd = i, j

meet = False
visited = [ [ [False] * n for _ in range(m) ] for _ in range(2) ]
visited[0][xc][yc] = True; visited[1][xd][yd] = True
q = [deque([(xc, yc)]), deque([(xd, yd)])]

offset = [((0, 1), (0, -1), (1, 0), (-1, 0), (1, 1), (1, -1), (-1, 1), (-1, -1)),
          ((0, 1), (0, -1), (1, 0), (-1, 0))]

def bfs(k):
    global meet
    L = len(q[k])
    for _ in range(L):
        x, y = q[k].popleft()
        for x1, y1 in [(x+a, y+b) for a, b in offset[k]]:
            if 0<=x1<m and 0<=y1<n and grid[x1][y1]!='#' and not visited[k][x1][y1]:
                visited[k][x1][y1] = True
                if visited[k ^ 1][x1][y1]:
                    meet = True
                    return True
                q[k].append((x1, y1))
        
res = 0
while q[0] or q[1]:
    res += 1
    if bfs(1): break
    if bfs(1): break
    if bfs(0): break
if meet: print('YES'); print(res)
else: print('NO')