Java 穿过迷宫(地牢)的最快路径

Java 穿过迷宫(地牢)的最快路径,java,traversal,dijkstra,shortest-path,maze,Java,Traversal,Dijkstra,Shortest Path,Maze,更新: 一些随机路径的输出在这里产生,我相信: if(openlist[x][y]!=1){ if(min>copy[x][y]){ min=copy[x][y]; holdx = x; holdy = y; } } 我相信在某些情况下,当我的最短路径比另一条路径大时,它会测试每条路径(并输出)。我该如何着手解决这个问题?从查看您的代码中,我所

更新:

一些随机路径的输出在这里产生,我相信:

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

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

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

从查看您的代码中,我所能看到的是您没有正确维护您的状态。 您有一个名为
moveToPosition()
的方法,但它是为每个节点调用的-最后您将每个
x/y
组合添加到
路径
列表

老实说,这其中很多都没有道理,我认为你有不止一个问题。还有很多糟糕的编程技巧会让你失分:

  • 不是面向对象的——你到处都在使用静态
  • 没有使用适当的范围-一切都是公开的
  • 没有评论
  • 无法解释其包含内容的变量的名称
  • 同一变量用于不同用途(holdx)
如果我是你,我会尝试完成你的profs示例。它将教你一些在OO设计中可以转移的技能。我会忽略文件中所有的读写操作。只需在方法中模拟一个快速节点[3][3]迷宫,并将其传递到初始方法中。您还需要跟踪是否已经访问了节点,但这应该很容易

很抱歉,我帮不上更多的忙-我的解决方案与你的profs非常相似,你会发现这同样难以理解,我反对为某人做作业-一个人不能用那种方式学习,一旦你克服了最初的困难,编程是非常愉快的

祝你一切顺利


设置
大小>100
时,需要增加
堆栈的大小,以解决
堆栈溢出错误

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

-Xss64M
应该可以做到这一点

作为一种解释,随着
size
参数的增加,递归的数量也在增加,这意味着将越来越多的方法调用放到
堆栈上(从抛出错误时打印的非常长的堆栈可以看出)。要继续使用具有如此多递归的应用程序,需要增加堆栈的大小

请参阅此以了解详细信息

当您遇到“真正的”StackOverflow错误时,这意味着您的堆栈有太多嵌套帧,JVM感觉不到它正在进步

为了解决这个问题,您可以调整JVM,但这是一个失败的游戏。总会有一些东西需要进行更多的调优,而这种调优会针对较小的迷宫取消JVM的调优


要真正解决这个问题,您需要保留一个状态集合,有效地将存储在堆栈上的信息推送到堆中。与堆栈不同,堆没有堆栈帧,因此不能将它们嵌套得太深。您仍然会面临内存不足异常的风险(如果您填满了堆),但这种情况很可能会在以后发生(并且会有更大的迷宫)。

“最小化危险”。这是否意味着通过一个9级怪物的路径比通过10个1级怪物的路径更可取?如果怪物的等级相等(九个一级与一个九级),是否有首选路径?如果你从StackOverflowError@heptadecagram分配的要点是以最小危险路径通过网格。这意味着,如果一条路径包含五个1级怪物和一个9级怪物,这将比一条包含五个2级怪物和一个6级怪物的路径更为优化(第一条路径的总危险等级为14,第二条路径的总危险等级为16)@对于任何大于62的路径,我都会得到:线程“main”中的异常java.lang.StackOverflowerr位于java.lang.AbstractStringBuilder。(AbstractStringBuilder.java:63)位于java.lang.StringBuilder。(StringBuilder.java:85)@JamesDoe-FYI-错误的真正重要部分是代码中的行,而不是核心JDK内容。不用担心,在我的IDE中运行了一个快速测试来查找错误。这仍然只修复了我的一个问题,而不是我遇到的主要问题。感谢您的帮助,我将很快编辑我的代码以适应您的修复。是的,可能稍后再看,但现在已经晚了,我可以很容易地修复错误。:)谢谢你看一看不,我明白。我理解我的教授的例子,只是不想实现所有的方法;主要是因为我时间紧迫,还有其他任务要做(这就是我把一切都推迟到最后一分钟的原因)。我所做的编码很差,我理解这一点,但它是不同元素的混合体,我从不同的powerpoints和示例中获取并修改了它们。所以,是的,即使对于我的标准来说,它也很差。我不需要太多的努力就可以做到这一点,也不需要太多的困难去理解它。不幸的是,如果我有更多的时间,我会以一种更干净的方式尝试这一点;但我没有,这就是我得到的。我感谢你的帮助,也理解你不愿意为我做这件事。谢谢你的帮助。对不起,我忘了把那部分拿出来,我修正了错误。谢谢你@埃德温巴克