Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在迷宫中寻找最短路径——谷歌采访中问道_Python - Fatal编程技术网

Python 在迷宫中寻找最短路径——谷歌采访中问道

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)

问题:写一个函数答案(地图),生成从监狱门到逃生舱的最短路径的长度,在那里你可以拆除一面墙,作为改造计划的一部分

路径长度是您通过的节点总数,包括入口和出口节点。起始和结束位置始终可以通过(0)

地图始终是可解的,尽管您可能需要也可能不需要移除墙。地图的高度和宽度可以从2到20。移动只能在基本方向上进行;不允许对角移动

输入:

(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=0和j>=0): 返回真值 其他: 返回错误 def FindShortPath(mat、访问、i、j、k): 全局计数器 M=len(已访问) 如果(i==M-1和j==M-1): 洛丽特(k) 计数器=k 其他: 到访[i][j]=1 “见底” 如果(isValid(i+1,j,M)和isSafe(mat,visited,i+1,j)): findShortestPath(mat、已访问、i+1、j、k+1) 如果(isValid(i,j+1,M)和isSafe(mat,visited,i,j+1)): FindShortPath(mat、已访问、i、j+1、k+1) 如果(isValid(i-1,j,M)和isSafe(mat,visited,i-1,j)): findShortestPath(mat、已访问、i-1、j、k+1) 如果(isValid(i,j-1,M)和isSafe(mat,visited,i,j-1)): findShortestPath(mat、visted、i、j-1、k+1) 返回计数器 def应答(mat): 全局lol L=透镜(mat) 已访问=[[0代表范围(L)中的x]代表范围(L)中的y] nr=[] FindShortPath(mat,已访问,0,0,1) 对于indexi,枚举中的nakul(mat): 对于indexj,枚举中的rathore(nakul): 如果(rathore==1): 附加编号([indexi,indexj]) 对于indexm,枚举中的nrm(nr): 材料[nrm[0]][nrm[1]]=0 已访问=[[0代表范围(L)中的x]代表范围(L)中的y] FindShortPath(mat,已访问,0,0,1) 材料[nrm[0]][nrm[1]]=1 ping=最小值(lol) lol=[] 返回ping 打印答案([[0,1,1,0]、[0,0,0,1]、[1,1,0,0]、[1,1,1,0]]) 打印答案([[0,0,0,0,0,0,0],[1,1,1,1,0],[0,0,0,0,0,0,0],[0,1,1,1,1],[0,1,1,1,1],[0,0,0,0,0,0,0])
你要提交的URL是什么?谷歌的foobar面板