Tkinter Gui For Astar 算法

Tkinter Gui For Astar algorithm

我正在尝试制作 Astar 算法的输入迷宫(找到起点和目的地之间的最短路径的算法,迷宫内可能会有一些障碍物, 它只输入一个表示阻塞的迷宫,如下所示。

在 GUI 中,在每个按钮中使用 Click1 命令, 我打算得到这样的输出(我在 [3][2] 处插入了一个阻塞)。
1代表从头到尾找到路径要避免的阻塞。

[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 1, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]

但我得到如下输出,我不明白为什么它会阻塞每一行的同一列

[[0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0]]

我在 init(): 的 class App() 中创建了这个迷宫:

def __init__(self, master,dimension,indexes):
   self.maze=[[0]*self.dimension]*self.dimension

这一切都在 class App():
用于创建按钮网格并存储它们的引用

        self.gid = []
        for i in range(self.dimension):
            row = []
            Grid.rowconfigure(self.frame1, i + 1, weight=3)
            for j in range(self.dimension):
                Grid.columnconfigure(self.frame1, j + 1, weight=3)
                btn=Button(self.frame1,command=lambda i=i, j=j: self.Click1(i, j))
                btn.grid(sticky=N+S+E+W,padx=2,pady=2,ipadx=1,ipady=1)
                row.append(btn)
                row[-1].grid(row=i + 1, column=j+1)
            self.gid.append(row)


Click1 method/Command 也在此 class:

    def Click1(self, i, j):
        self.indxes.append((i,j))
        if len(self.indxes)==1:
            self.gid[i][j]["bg"]="blue" #indicates start
        elif len(self.indxes)==2:
            self.gid[i][j]["bg"]="green" #indicates destinations
        else:
            self.gid[i][j]["bg"] = "black"
            self.maze[i][j] = 1  #how I insert blockage within the maze

在你的初始化中试试这个:

def __init__(self, master,dimension,indexes):
   self.maze = [[0] * self.dimension] for _ in range(self.dimension)]

后一个 * self.dimension 调用将相同的引用分配给所有内部列表(维度次数)——这意味着当一个被改变时,所有的都会改变。

这会为每个子列表创建一个唯一的列表