python - 无法找到到达包括障碍物在内的目标的最短距离
问题描述
我试图找到到达我的目标 X 的最小可能距离。下面提供的是图表的快照。
O代表Occupied,V代表Vacant,X代表经理(我的目标)
以下是我找到最短距离的方法。但是在运行我的代码后我没有得到输出。
x=[['O','O','O','O','O','O','O','X'],
['O','V','O','O','O','O','O','O'],
['O','O','V','O','O','O','V','O'],
['O','O','O','O','O','O','O','O'],
['O','O','O','O','O','O','O','O'],
['O','O','O','O','O','O','O','O'],
['O','O','O','O','O','O','O','O'],
['O','O','O','O','V','O','O','O']]
from collections import deque
def solveMaze(maze):
R, C = len(maze), len(maze[0])
start = (0, 0)
for r in range(R):
for c in range(C):
if maze[r][c] == 'V':
start = (r, c)
break
else: continue
break
else:
return None
queue = deque()
queue.appendleft((start[0], start[1], 0))
directions = [[0, 1], [0, -1], [1, 0], [-1, 0]]
visited = [[False] * C for _ in range(R)]
while len(queue) != 0:
coord = queue.pop()
visited[coord[0]][coord[1]] = True
if maze[coord[0]][coord[1]] == "X":
return coord[2]
for dir in directions:
nr, nc = coord[0]+dir[0], coord[1]+dir[1]
if (nr < 0 or nr >= R or nc < 0 or nc >= C or maze[nr][nc] == "O" or visited[nr][nc]): continue
queue.appendleft((nr, nc, coord[2]+1))
print(solveMaze(x))
解决方案
推荐阅读
- flutter - 关于支付方式 Flutter
- android - 如何实现嵌套的 RecycleView?
- kubernetes - 获取名称空间中的所有 pod,然后使用 REST API 的/客户端库获取每个 pod 的映像版本
- mysql - 获取股票的最新报价数据
- node.js - 为大型用户群运行脚本的最佳方式?
- asp.net-identity - 在 Asp.net Identity 核心中确认不止一封电子邮件
- npm - “PulseTile-RA”无法运行。这是一个 npm 依赖问题吗?
- java - invalidateOptionsMenu 不会在旧 API 上重新创建项目
- mongodb - 连接到 Mongodb 时出现错误
- go - 字节切片自行改变