【发布时间】:2017-11-07 08:32:51
【问题描述】:
我正在尝试编写一个代码来检查迷宫中是否存在从第一个坐标到最后一个坐标的路径,由矩阵表示。我也在尝试使用队列。这是我到目前为止的代码:
from queue import Queue
maze=open(input())
matrix=maze.readlines()
matrix=[i.strip() for i in matrix]
matrix=[i.split() for i in matrix]
q=Queue()
row=0
column=0
q.put(row,column)
while not q.empty():
row,col=q.get()
if matrix[row][col+1]=="0" and col+1<len(matrix[0]):
q.put(row,col+1)
matrix[row][col+1]="2"
if matrix[row+1][col]=="0" and row+1<len(matrix):
q.put(row+1,col)
matrix[row+1][col]="3"
if matrix[row][col-1]=="0" and col-1>len(matrix[0]):
q.put(row,col-1)
matrix[x][x-1]="4"
if matrix[row-1][col]=="0" and row-1<len(matrix):
q.put(row-1,col)
matrix[row-1][col]="5"
我可以在末尾添加什么以获得“是”(如果有路径)和“否”(如果没有路径)的输出?
这是一个包含矩阵的文本文件示例。
0 0 0 0 1 0 0 0
0 1 1 0 1 0 1 0
0 1 0 0 1 0 1 0
0 0 0 1 0 0 1 0
0 1 0 1 0 1 1 0
0 0 1 1 0 1 0 0
1 0 0 0 0 1 1 0
0 0 1 1 1 1 0 0
我尝试在最后添加这个。我运行我的代码,它说“'int' object is not iterable”
if matrix[7][7]=="2" "3" "4" or "5":
print "yes"
else:
print "no"
【问题讨论】:
-
matrix[x[0]][x[1]+1]=="2"进行比较并丢弃结果。应该是matrix[x[0]][x[1]+1] = "2"? -
如果您展示一些典型的迷宫数据,那么分析您的代码会更容易很多。为了创建minimal reproducible example,您可以将矩阵硬编码为代码中的列表。
-
此外,所有这些
x[0]和x[1]使代码难以阅读。如果您将坐标拆分为一对变量,例如row, col = q.get(),那么眼睛会轻松很多。 -
注意!我编辑了我的代码,谢谢!我不确定我最后的建议是否正确。希望现在更容易阅读。
-
row和col是纯整数,所以你应该有像if matrix[row][col+1]=="0"这样的东西
标签: python matrix path breadth-first-search maze