Menu
CoddyTech

Rat in a Maze

中等回溯python iconjava iconcpp iconc iconjs icon+10

一只老鼠从 n × n 的 maze 左上角单元格出发,其中 1 表示可通行的单元格,0 表示墙,它必须到达右下角单元格。每次移动一格,向下(D)、向左(L)、向右(R)或向上(U),并且只能进入可通行的单元格。路径不能重复经过同一个单元格,并且必须在出口结束。

按字母顺序返回所有移动路径组成的字符串;如果没有路径,则返回空数组。

函数

findPaths(maze: integer-2d-array) → string-array
mazeinteger-2d-array
n × n 网格,其中 1 表示可通行单元格,0 表示墙
返回值string-array
按字母顺序,将从左上角到右下角的每条路径表示为移动字符串

约束条件

  • 2 ≤ n ≤ 5
  • maze[i][j] 是 0 或 1。
  • 每个测试迷宫最多有 2,000 条路径。没有障碍的 5 × 5 迷宫有 8,512 条路径,因此不会出现在测试中。

示例

输入
maze = [[1, 1, 0, 0], [0, 1, 1, 0], [1, 1, 1, 0], [1, 0, 1, 1]]
输出
["RDDRDR", "RDRDDR"]
解释
一开始只有右边的格子是开放的,从那里出发也只有下面的格子是开放的,所以两条路径都以 RD 开始。RDDRDR 排在前面,因为它的第三步 D 在 R 之前。
challenge icon

进阶

允许进行全部四种移动后,你能不逐条列出路径,直接数出路径总数吗?在路径总数大到无法计算之前,n 最大能是多少?

重置代码
def findPaths(maze):
    # 在这里编写代码

测试 #1

测试 #2

参数

maze = [[1, 1, 0, 0], [0, 1, 1, 0], [1, 1, 1, 0], [1, 0, 1, 1]]

预期输出

["RDDRDR", "RDRDDR"]