Python 如何在5x5矩阵中找到(0,0)和(4,4)之间的最短路径,给定每一步的水平或垂直平移

Python 如何在5x5矩阵中找到(0,0)和(4,4)之间的最短路径,给定每一步的水平或垂直平移,python,shortest-path,Python,Shortest Path,我编写了以下代码来描述我脑海中的问题: row = int(input("How many rows? ")) column = int(input("How many columns? ")) sample_map = [] to_append =[] for i in range(row): for j in range(column): to_append.append("_") sample_map.append(to_append) to_app

我编写了以下代码来描述我脑海中的问题:

row = int(input("How many rows? "))
column = int(input("How many columns? "))
sample_map = []
to_append =[]
for i in range(row):
    for j in range(column):
        to_append.append("_")
    sample_map.append(to_append)
    to_append=[]

def add_to_map(indicator=input("What symbol do you want to use? ")):
    x_coordinate = int(input("Input x coordinate. Note: (0,0) starts at top left. "))-1
    y_coordinate = int(input("Input y coordinate. "))-1

    sample_map[x_coordinate][y_coordinate] = indicator

continue_to_add =input("Do you want to add something to the map? Answer yes or no. ")
while(continue_to_add=="yes"):
    add_to_map()
    continue_to_add =input("Do you want to add something else to the map? Answer yes or no. ")

sample_map[0][0] = "S"
sample_map[row-1][column-1] = "E"

for element in sample_map:
    print(element)
考虑以下输出:

在有X的空间中,不能移动到该空间中。因此,在上图中,可能的路线如下: (0,0)->(0,1)->(0,2)->(0,3)->(1,3)->(2,3)->(3,3)->(4,3)->(4,4)

总共有八个步骤。 理想情况下,代码应该能够适应图表上X位置的给定更改路径


如果Xs以阻止任何移动的方式出现(即,Xs位于(0,1)、(1,1)和(1,0),则应返回-1或以其他方式指示不可能存在路径。)

正如对您的问题的评论所暗示的(建议),您希望将其框定为图论/网络问题:

  • 网格上的每个位置都是一个节点
  • 如果恰好一个坐标相差正好1,则节点共享一条边
  • X
    节点(及其关联的边)将被删除

然后问题就变成了,在两个节点之间的图中找到最短路径。如果节点不在同一连接组件中,则不存在这样的路径。

对于cs.stackexchangeCo-signing的其他一些注释,可能会使用*作为问题。您可能想询问,并且您可能正在寻找或一些类似A*-的算法(例如)。感谢各位,我们将与CS stack exchange联系,尽管它们是相同的。