Python 在迷宫中寻找最短路径——谷歌采访中问道
问题:写一个函数答案(地图),生成从监狱门到逃生舱的最短路径的长度,在那里你可以拆除一面墙,作为改造计划的一部分 路径长度是您通过的节点总数,包括入口和出口节点。起始和结束位置始终可以通过(0) 地图始终是可解的,尽管您可能需要也可能不需要移除墙。地图的高度和宽度可以从2到20。移动只能在基本方向上进行;不允许对角移动 输入:Python 在迷宫中寻找最短路径——谷歌采访中问道,python,Python,问题:写一个函数答案(地图),生成从监狱门到逃生舱的最短路径的长度,在那里你可以拆除一面墙,作为改造计划的一部分 路径长度是您通过的节点总数,包括入口和出口节点。起始和结束位置始终可以通过(0) 地图始终是可解的,尽管您可能需要也可能不需要移除墙。地图的高度和宽度可以从2到20。移动只能在基本方向上进行;不允许对角移动 输入: (int) maze = [[0, 1, 1, 0], [0, 0, 0, 1], [1, 1, 0, 0], [1, 1, 1, 0]] (int) 7 (int)
(int) maze = [[0, 1, 1, 0], [0, 0, 0, 1], [1, 1, 0, 0], [1, 1, 1, 0]]
(int) 7
(int) maze = [[0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0]]
(int) 11
输出:
(int) maze = [[0, 1, 1, 0], [0, 0, 0, 1], [1, 1, 0, 0], [1, 1, 1, 0]]
(int) 7
(int) maze = [[0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0]]
(int) 11
输入:
(int) maze = [[0, 1, 1, 0], [0, 0, 0, 1], [1, 1, 0, 0], [1, 1, 1, 0]]
(int) 7
(int) maze = [[0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0]]
(int) 11
输出:
(int) maze = [[0, 1, 1, 0], [0, 0, 0, 1], [1, 1, 0, 0], [1, 1, 1, 0]]
(int) 7
(int) maze = [[0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0]]
(int) 11
我写了一个程序,它在本地运行,但当我在线提交并验证它时,它不起作用 它只通过了5次测试中的第一次测试 我知道前两个测试输入,我单独测试了em,它正在本地工作
import sys
counter = 1
lol = []
def lolit(k):
global lol
lol.append(k)
def isSafe(mat, visited, i, j):
try:
if(mat[i][j] == 1 or visited[i][j]):
return False
else:
return True
except:
return False
def isValid(i,j,M):
if (i < M and j < M and i >= 0 and j >= 0):
return True
else:
return False
def findShortestPath(mat,visited,i,j,k):
global counter
M = len(visited)
if(i == M-1 and j == M-1):
lolit(k)
counter = k
else:
visited[i][j] = 1
'''go to bottom'''
if(isValid(i + 1, j,M) and isSafe(mat, visited, i + 1, j)):
findShortestPath(mat, visited, i + 1, j,k+1)
if (isValid(i, j + 1,M) and isSafe(mat, visited, i, j + 1)):
findShortestPath(mat, visited, i, j + 1,k+1)
if (isValid(i - 1, j,M) and isSafe(mat, visited, i - 1, j)):
findShortestPath(mat, visited, i - 1, j,k+1)
if (isValid(i, j - 1,M) and isSafe(mat, visited, i, j - 1)):
findShortestPath(mat, visited, i, j - 1,k+1)
return counter
def answer(mat):
global lol
L = len(mat)
visited = [[0 for x in range(L)] for y in range(L)]
nr = []
findShortestPath(mat,visited,0,0,1)
for indexi,nakul in enumerate(mat):
for indexj,rathore in enumerate(nakul):
if(rathore == 1):
nr.append([indexi,indexj])
for indexm,nrm in enumerate(nr):
mat[nrm[0]][nrm[1]] = 0
visited = [[0 for x in range(L)] for y in range(L)]
findShortestPath(mat,visited,0,0,1)
mat[nrm[0]][nrm[1]] = 1
ping = min(lol)
lol =[]
return ping
print answer([[0, 1, 1, 0], [0, 0, 0, 1], [1, 1, 0, 0], [1, 1, 1, 0]])
print answer([[0, 0, 0, 0, 0, 0], [1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1], [0, 0, 0, 0, 0, 0]])
导入系统
计数器=1
lol=[]
def lolit(k):
全局lol
lol.append(k)
def isSafe(mat、访问、i、j):
尝试:
如果(mat[i][j]==1或访问[i][j]):
返回错误
其他:
返回真值
除:
返回错误
def有效(i、j、M):
如果(i你要提交的URL是什么?谷歌的foobar面板