【问题标题】:python maze recurrsion not recurssingpython迷宫递归不递归
【发布时间】:2013-11-04 01:05:58
【问题描述】:

我正在尝试以递归方式解决一个迷宫,我可以让它去我想要它去的地方(检查以确保它可以走一条路,然后将它标记为在那里)但是由于某种原因它运行时进入死胡同,它不会递归地回到一个开放的地方检查另一条路径。我使用递归的方式有什么问题吗?

class maze(object):
    def __init__(self, maze):
        self.maze = maze
        self.maze2d = []
        n = 0
        i = 0
        for row in self.maze:
            self.maze2d.append([])
            print(row)
            for col in row:
                self.maze2d[i].append(col)
            i += 1
        print(self.maze2d)

    def find_start(self):
        x = 0 
        y = 0
        for row in self.maze2d:
            for index in row:
                if index == "S":
                    self.maze2d[x][y] = index
                    return x,y
                y += 1
            x += 1
            y = 0
        return -1

    def mazeSolver(self,x,y,path):
        if self.maze2d[x][y] == "E":
            return True
        else:
            if self.maze2d[x] != 0: 
                if self.maze2d[x+1][y] == ".":
                    self.maze2d[x+1][y] = "_"
                    self.mazeSolver(x+1,y,path + "S")
            if self.maze2d[x] < len(self.maze2d):
                if self.maze2d[x-1][y] == ".":
                    self.maze2d[x-1][y] = "_"
                    self.mazeSolver(x-1,y,path + "N")
            if y < len(self.maze2d[x]): 
                if self.maze2d[x][y+1] == ".":
                    self.maze2d[x][y+1] = "_"
                    self.mazeSolver(x,y+1,path + "E")
            if self.maze2d[y] != 0:
                if self.maze2d[x][y-y] == ".":
                    self.maze2d[x][y-1] = "_"
                    self.mazeSolver(x,y-1,path + "W")

以及我在哪里调用函数和迷宫本身:

from eachstep import *

maze1 = []

maze1.append("S..*..")
maze1.append("*...*.")
maze1.append("..*..E")

var1 = maze(maze1)
x,y = var1.find_start()
var1.mazeSolver(x,y,"")

【问题讨论】:

  • 澄清一下,.*这两个字符代表什么?
  • @Jen 你在递归点忘记return了吗?
  • 在搜索 x+1 或 x-1 之前,您应该确认您不在该行的末尾或开头。 y 也一样
  • 哎呀,对不起,盯着它太久了:p。是一条开放路径,* 是一堵墙。 S 是开始,E 是结束。
  • @Satoru.Logic - 我意识到我需要在最后返回(一旦到达最后,返回实际路径),问题是我一直在尝试调试它,并且当我从一开始的左边走过时,它向南走了 3 次,直到空间不足。与其去递归调用之前尝试不同的路线,它只是吓坏了,因为它无处可去并结束了。

标签: python recursion maze


【解决方案1】:

我用这个改变了你的 mazeSolver 函数。我在最后打印路径:

def mazeSolver(self,x,y,path):
    if self.maze2d[x][y] == '.':
        self.maze2d[x][y] = "_"
    if self.maze2d[x][y] == "E":
        print path
        return True
    else:
        if x < len(self.maze2d)-1: 
            if self.maze2d[x+1][y] in ['.','E']:
                self.mazeSolver(x+1,y,path + "S")
        if x > 0:
            if self.maze2d[x-1][y]  in ['.','E']:
                self.mazeSolver(x-1,y,path + "N")
        if y < len(var1.maze2d[x])-1: 
            if self.maze2d[x][y+1]  in ['.','E']:
                self.mazeSolver(x,y+1,path + "E")
        if y > 0:
            if self.maze2d[x][y-y]  in ['.','E']:
                self.mazeSolver(x,y-1,path + "W")

>>> var1.mazeSolver(x,y,"")
ESEESEE
>>>> var1.maze2d
[['S', '_', '_', '*', '.', '.'],
 ['*', '_', '_', '_', '*', '.'],
 ['_', '_', '*', '_', '_', 'E']]

【讨论】:

    【解决方案2】:

    您的代码永远不会到达末尾,因为它只会访问值为. 的位置,而末尾的值为E

    【讨论】:

      猜你喜欢
      • 2016-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-11
      • 2013-12-09
      • 2014-05-07
      • 2014-05-08
      相关资源
      最近更新 更多