Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 矩阵对策中的路径识别_Python_Algorithm_Data Structures_Printing_Breadth First Search - Fatal编程技术网

Python 矩阵对策中的路径识别

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()

如果有最短路径,我将返回最短路径的长度。否则,我返回-1

我试图以这样一种方式打印矩阵:所有作为最短路径一部分的访问节点都用“$”而不是“1”标记。但是,我不能这样做

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