Python 矩阵对策中的路径识别
如果有最短路径,我将返回最短路径的长度。否则,我返回-1 我试图以这样一种方式打印矩阵:所有作为最短路径一部分的访问节点都用“$”而不是“1”标记。但是,我不能这样做Python 矩阵对策中的路径识别,python,algorithm,data-structures,printing,breadth-first-search,Python,Algorithm,Data Structures,Printing,Breadth First Search,如果有最短路径,我将返回最短路径的长度。否则,我返回-1 我试图以这样一种方式打印矩阵:所有作为最短路径一部分的访问节点都用“$”而不是“1”标记。但是,我不能这样做 def Path(grid): #print(grid) start = (0, 0) queue = collections.deque([[start]]) seen = set([start]) while queue: path = queue.popleft()
def Path(grid):
#print(grid)
start = (0, 0)
queue = collections.deque([[start]])
seen = set([start])
while queue:
path = queue.popleft()
x, y = path[-1]
if y == 7 and x == 7:
#print(path)
for (i, j) in path:
grid[i][j] = '$'
print(grid)
return len(path)
for x2, y2 in ((x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1):
if (grid[y2][x2] != 0) and (x2, y2) not in seen:
queue.append(path + [(x2, y2)])
seen.add((x2, y2))
print(grid)
return -1
问题在于如何处理
网格:
在查找下一个可用移动时,请执行以下测试:
grid[y2][x2] != 0
其中,(x2,y2)
可能添加到路径中
但当您最终分配$
时,您会写:
grid[i][j] = '$'
其中(i,j)
是从路径获取的元组
这是不一致的。您应该交换两个网格[][]
表达式之一中的坐标位置,以使它们一致。发布的代码没有缩进问题。这以一种方式解决了问题。如果我打印grid[j][I]=2
,但当我尝试打印grid[j][I]='$'
时,给int()以10为基数的无效文本:“X”
错误,当网格的所有其他值都是1和0,但这个值必须是字符时,我如何解决这个问题呢?但在你的问题中,你是这样做的print(grid)
。您似乎在问一个关于不同代码的新问题?“尝试打印网格[j][i]='$'
”是什么意思?这是一项任务;不是你打印的东西。。。您提到的错误可能发生在尝试将内容转换为整数时,但问题中的代码没有这样做。所以你似乎问了一些关于你没有提供的代码的问题。不,我在两个不同的地方打印网格。如果没有路的话,最后一个。如果有路径,则在网格[j][i]='$'之后第二个。通过编写此语句,我打算将作为最短路径一部分的所有1更改为“$”,然后在返回之前打印更新的网格。但它给出了一个错误,因为“$”不是整数。触发错误的代码行是什么?我很确定这一行不在您的问题中。这一行:grid[j][I]='X'
会导致错误,但如果您传递的网格矩阵没有从上到下的路径,则在第一次尝试时可能不会得到错误。在这种情况下,它打印未更改的网格并返回-1