贴一个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')