最近我一直在尝试处理一些递归迷宫代码,它返回迷宫中的最短路径。如果没有通过迷宫的路径,则代码将返回 -1。例如,对于董事会:W-S-------X-其中 S 是迷宫的起点,W 代表一堵墙,X 代表所需的目的地,而 - 代表一个可用的路径点。输出将是:2对于董事会: -SW -W- W-X输出将是 -1这一切都是通过一个带字符串和迷宫尺寸的 board 类、一个返回最短路径的检查函数和一个返回最短路径的 win 函数来实现的,如果没有路径,则返回 -1。但是,当我运行代码时,第一个示例的输出为负 1,第二个示例的输出为 1。有人可以解释我做错了什么(仅在我的新输出和所需输出之间)以及我如何解决它?编辑:谢谢peter 和mrB,我已经实施了你的建议并更新了我的代码以适应它!
2 回答
繁花不似锦
TA贡献1851条经验 获得超4个赞
看起来您的代码有两个问题。
首先,win()
函数中的 while 循环会将您的起始位置留在板的左上角。
z == 0
这意味着这z > 0
是错误的并且不会使用 while 循环。你不增加
x
ory
,所以 z 条件失败或者你有无限循环是好的。
其次,maxPath
从不赋值。使得它0
和去出界(我想第一了)所有的结果成为的结果check(x,y)
,因为它是1 + 0
。该-1
结果都是当离开板的顶部是'W'
或'X'
在这种情况下check(x,y)
返回0
其等于maxPath
您可能还想设置check(x,y)
为 int 而不是再次调用它来返回结果(更大的板可能会变得有点资源密集)。
总之
更新while循环使用
z == 0
和增量x
和y
分别。设置
maxPath
为一个值,例如9999
更改条件
win()
以检查check(x,y)
is 的结果< maxPath
(否则您可能不会得到-1
结果,win()
因为有可能maxPath
会增加 1 或更多并!= maxPath
导致 true)。
添加回答
举报
0/150
提交
取消