题解 | #迷宫问题#

https://www.nowcoder.com/practice/cf24906056f4488c9ddb132f317e03bc

def function(board: list) -> list:
    n = len(board)
    m = len(board[0])

    def dfs(i, j, que) -> bool:
        if i == n - 1 and j == m - 1:
            return True
        board[i][j] = 1
        if i - 1 >= 0 and board[i - 1][j] == 0 and (i - 1, j) not in que:
            que.append((i - 1, j))
            if dfs(i - 1, j, que):
                return True
        if i + 1 < n and board[i + 1][j] == 0 and (i + 1, j) not in que:
            que.append((i + 1, j))
            if dfs(i + 1, j, que):
                return True
        if j - 1 >= 0 and board[i][j - 1] == 0 and (i, j - 1) not in que:
            que.append((i, j - 1))
            if dfs(i, j - 1, que):
                return True
        if j + 1 < m and board[i][j + 1] == 0 and (i, j + 1) not in que:
            que.append((i, j + 1))
            if dfs(i, j + 1, que):
                return True
        que.pop()
        board[i][j] = 0
        return False

    que = [(0, 0)]
    dfs(0, 0, que)
    return que


if __name__ == '__main__':
    n, m = map(int, input().split(' '))
    board = []
    for _ in range(n):
        board.append(list(map(int, input().split(' '))))
    ans = function(board)
    for p in ans:
        print('({},{})'.format(p[0], p[1]))

全部评论

相关推荐

10-22 12:03
山东大学 Java
程序员小白条:26届一般都得有实习,项目可以随便写的,如果不是开源社区的项目,随便包装,技术栈也是一样,所以本质应该找学历厂,多投投央国企和银行,技术要求稍微低一点的,或者国企控股那种,纯互联网一般都得要干活
应届生简历当中,HR最关...
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务