栈走迷宫,一直在往4个方向把位置压入栈中,当当前位置4个方向都不能加入的时候,它就取出栈顶的位置,再往4个方向添加位置压入栈中(这里要注意判断只有当没有访问过的位置才可以压入栈)。
兄弟萌,话不多说,上代码!
from stack_queue.code import SStack
dirs = [(0,1),(1,0),(0,-1),(-1,0)]
def mark(maze,pos): # 给迷宫maze的位置pos标2表示"到过"
maze[pos[0],pos[1]] = 2
def passable(maze,pos): # 检查迷宫maze的位置pos是否可行
return maze[pos[0],pos[1]] == 0
def maze_solver(maze,start,end):
if start == end:
print(start)
return
st = SStack()
mark(maze,start) # 标记当前位置已访问
st.push((start,0)) # 入口和方向0的序对入栈
while not st.is_empty(): # 走不通时回退
pos, nxt = st.pop() # 取栈顶及其探查方向
for i in range(nxt,4): # 依次检查未探查方向
nextp = (pos[0]+dirs[i][0],
pos[1]+dirs[i][1]) # 算出下一位置
if nextp == end: # 到达出口,打印路径
print_path((end,pos,st)) # 这个函数需要自己实现
return
if passable(maze,nextp): # 遇到未探查的新位置
st.push((pos,i+1)) # 原位置和下一方向入栈
mark(maze,nextp)
st.push((nextp,0)) # 新位置入栈
break # 退出内层循环,下次迭代将以新栈为当前位置继续
print("No path found.")