gpt4 book ai didi

python - 在 Python 中使用堆栈求解迷宫 - 我的算法是否正确?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:38:07 25 4
gpt4 key购买 nike

我编写了一些 Python 代码来帮助我理解如何使用堆栈而不是递归来解决迷宫问题。

我想出了 SEEMS 的工作原理(如代表迷宫的二维数组中的目标位置是迷宫的几个版本)。如果 1 表示墙,0 表示空间,2 表示目标,3 表示“已访问” ".

但是,我很怀疑,希望有人确认逻辑是否正确,如果不正确,我需要做些什么来修复它。

我主要担心的是,即使坐标已经被访问过,它们也会被放回堆栈中。

请理解我的情况的先有鸡还是先有蛋的性质——我不完全理解算法是如何工作的,所以我写了一些代码来帮助我理解,但我不确定代码是否正确,这在一定程度上取决于对算法的理解...

一如既往,非常感谢您的帮助。代码如下:

class Stack:
def __init__(self):
self.list = []

def push(self, item):
self.list.append(item)

def pop(self):
return self.list.pop()

def top(self):
return self.list[0]

def isEmpty(self):
return not self.list

def empty(self):
self.list = []

maze = [[0, 0, 1, 1],
[0, 1, 0, 1],
[0, 0, 1, 1],
[0, 0, 2, 0]]

MAZE_SIZE = len(maze)


def print_maze(maze):
for row in maze:
print((row))

def is_valid_pos(tup):
(col, row) = tup
if col < 0 or row < 0 or col >= MAZE_SIZE or row >= MAZE_SIZE :
return False
return maze[row][col] == 0 or maze[row][col] == 2


def solve(maze, start):
s = Stack()
(col,row) = start
print('pushing ({},{})'.format(col,row))
s.push((col,row))

while not s.isEmpty():
print('Stack contents: {}'.format(s.list))
input('Press Enter to continue: ')
print('Popping stack')
(col, row) = s.pop()
print('Current position: ({}, {})'.format(col,row))

if maze[row][col] == 2:
print('Goal reached at ({}, {})'.format(col,row))
return
if maze[row][col] == 0:
print('Marking ({}, {})'.format(col,row))
maze[row][col] = 3
print_maze(maze)
print('Pushing coordinates of valid positions in 4 directions onto stack.')
if is_valid_pos((col+1, row)): s.push((col+1, row))
if is_valid_pos((col, row+1)): s.push((col, row+1))
if is_valid_pos((row, col-1)): s.push((row, col-1))
if is_valid_pos((row-1, col)): s.push((row, col))


solve(maze, (0,0))

最佳答案

因为在你的坐标系中列总是在行之前,你应该改变:

if is_valid_pos((row, col-1)): s.push((row, col-1))
if is_valid_pos((row-1, col)): s.push((row, col))

到:

if is_valid_pos((col-1, row)): s.push((col-1, row))
if is_valid_pos((col, row-1)): s.push((col, row-1))

你的代码会工作。

关于python - 在 Python 中使用堆栈求解迷宫 - 我的算法是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52458869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com