我正在尝试实施洪水填充以查找网格中所有可用的单元格 我的机器人可以从中移动到的位置。如果一个单元格被占用,其值为1, 如果单元格空闲,则其值为0。我的代码似乎可以平方运算 矩阵,但不在其他矩阵上。在我的代码中,我用 数字2。
这是我的代码:
def floodfill(matrix, x, y):
if matrix[x][y] == 0:
matrix[x][y] = 2
if x > 0:
floodfill(matrix,x-1,y)
if x < len(matrix[y]) - 1:
floodfill(matrix,x+1,y)
if y > 0:
floodfill(matrix,x,y-1)
if y < len(matrix) - 1:
floodfill(matrix,x,y+1)
此矩阵似乎有效:
def main():
maze = [[0, 1, 1, 1, 1, 0, 0, 0, 1, 0],
[0, 1, 0, 1, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 1, 0, 1, 0, 0, 0],
[0, 1, 0, 0, 0, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 1, 0, 1, 0, 1, 1],
[0, 1, 0, 1, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 1, 0, 1, 0, 1, 0],
[0, 1, 0, 1, 1, 0, 1, 0, 1, 0],
[0, 0, 0, 1, 1, 0, 1, 0, 1, 0]]
floodfill(maze, 0,0)
print(maze)
并且此矩阵没有(删除最后一列的相同矩阵):
def main():
maze = [[0, 1, 1, 1, 1, 0, 0, 0, 1],
[0, 1, 0, 1, 1, 0, 1, 0, 1],
[0, 1, 0, 1, 1, 0, 1, 0, 0],
[0, 1, 0, 0, 0, 0, 1, 0, 1],
[0, 1, 0, 1, 1, 0, 1, 0, 1],
[0, 1, 0, 1, 1, 0, 1, 0, 1],
[0, 1, 0, 1, 1, 0, 1, 0, 1],
[0, 1, 0, 1, 1, 0, 1, 0, 1],
[0, 1, 0, 1, 1, 0, 1, 0, 1],
[0, 0, 0, 1, 1, 0, 1, 0, 1]]
floodfill(maze, 0,0)
print(maze)
感谢您的帮助。 谢谢!
答案 0 :(得分:1)
您的第一个矩阵起作用是因为它是一个正方形矩阵,其中行数和列数等于10。
在第二种情况下,矩阵不是方阵,因为您有10行(x
变量),但只有9列(y
变量)。因此,当您
y < len(matrix) - 1
len(matrix)
是10,表示您将上升到y < 9
。否则,您将收到“列表索引超出范围错误”。为了获得正确的数字,您应该对照行的长度进行检查,以获取列数。一种方法是将第一行的长度用作len(matrix[0])
。
类似地,对于x
,您应该使用可以使用len(matrix)
访问的相应行数(在您的情况下为10)。因此,您应该使用
if x < len(matrix) - 1
而不是juvian也http://localhost/signalr/hubs也在注释中指出了这一点。
其他方法是将列表列表转换为NumPy数组,并使用if x < len(matrix[y]) - 1:
命令获取相应的行数和列数。
答案 1 :(得分:0)
访问矩阵中的元素时,行索引排在最前面(矩阵是行的数组),然后是列索引(每行是数字的数组)。
您要matrix[y][x]
,而不是matrix[x][y]
。