通过迷宫(Dungeon)Dijstkra最快的路径

时间:2014-05-12 20:21:01

标签: java traversal dijkstra shortest-path maze

更新:

这里引起了一些随机路径的输出我相信:

if(openlist[x][y]!=1){

            if(min>copy[x][y]){
            min=copy[x][y];
            holdx = x;    
            holdy = y;
            }
        }

我相信在某些点上,当我的最短路径比另一条路径大时,它会测试每条路径(并输出它)。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

通过查看您的代码我可以看到的是,您没有正确地维护您的状态。 您有一个名为moveToPosition()的方法,但每个节点都会调用它 - 您最终会将每个x/y组合添加到paths List

说实话,很多事情没有意义,我认为你有不止一个问题。还有很多糟糕的编程技术会让你失去标记:

  • 不是OO - 你到处都在使用静态。
  • 没有使用适当的范围 - 一切都是公开的
  • 没有评论
  • 不解释它们包含的变量的名称。
  • 将相同变量用于不同用途(holdx)

如果我是你,我会尝试完成你的教授榜样。它将教你OO设计中一些体面的可转移技能。我会忽略整个文件的读写。只需在方法中模拟一个快速的Node [3] [3]迷宫,然后将其传递给初始方法。您还需要跟踪您是否已经访问过某个节点,但这应该很容易。

抱歉,我无法提供更多帮助 - 我的解决方案与你的教授非常相似,你会发现同样难以理解,而且我反对为某人做功课 - 一个人不能这样学习,而且编程非常一旦你克服了最初的困难,你就会感到愉快。

一切顺利


作为设置StackOverflowErrorsize > 100的解决方案,您需要增加stack的尺寸。

要增加堆栈大小,请使用Java VM参数-Xss并将其设置为大于默认值的值。

-Xss64M应该做到这一点。

作为一种解释,随着你增加size param,你也增加了你正在进行的递归量,这意味着将越来越多的方法调用放到stack上(如下所示)抛出错误时打印的非常长的堆栈)。要通过这么多递归继续使用您的应用程序,您需要增加堆栈的大小。

有关详细信息,请参阅此SO question

答案 1 :(得分:0)

当你得到一个真实的" StackOverflow错误,这意味着您的堆栈有太多的嵌套框架让JVM觉得它正在取得进展。

要解决这个问题,你可以调整你的JVM,但那是一场失败的游戏。总会有一些东西需要更多的调整,调整将调整JVM以适应更小的迷宫。

要真正解决问题,您需要保留一组状态,有效地将存储在堆栈中的信息推送到堆中。与堆栈不同,堆没有堆栈帧,因此您无法将它们嵌套得太深。你仍然会冒着内存不足异常的风险(如果你填满你的堆),但这可能会发生得更晚(并且有更大的迷宫)。