我的作业是确定迷宫是否可以解决不使用Queue。如果是,请打印路径。我可以让Queue到达末尾,但它说它是无法解决的。实际上是。如果我将Final check if语句更改为:
if (queue.isEmpty())
{
System.out.println("The maze is solvable!");
}
else
{
System.out.println("The maze is unsolvable!");
}
然后它说它是可解的,但是当我尝试另一个不可解的迷宫时,它说它是可解的。不确定自己哪里错了。
我有一个单独的 Point 类,用于定义 Point 以及右、左、上方和下方的位置。我必须使用点(0,0)来标记开始,并使用点(行-1,col-1)来标记目标。
如果您需要更多代码,请告诉我。它正在搜索字符2D数组。
maze1.txt - (第一行定义行数和列数) - 可解
7 12
..+.+.++++++
.++...++...+
..++.....+.+
+.+..++.+..+
+...++....++
+.+++..++..+
++++++++++..
说这是无解的
QueueMaze
The maze is unsolvable!
p p + p + p + + + + + +
p + + p p p + + p p p +
p p + + p p p p p + p +
+ p + p p + + p + p p +
+ p p p + + p p p p + +
+ p + + + p p + + p p +
+ + + + + + + + + + p .
mmethod解决迷宫
public void queueMaze() {
char[][] storedMaze = copy();
LinkedList<Point> queue = new LinkedList<Point>();
int count = 0;
Point start = new Point(0,0);
Point cur, end, above, right, left, below;
Boolean solved = false;
queue.add(start);
while (!queue.isEmpty())
{
//Store the first element position 0 in cur
cur = queue.removeFirst();
//System.out.println(cur.toString());
//compare cur's points to the isEnd points
//(row-1, col-1) if it is the end, break out
//of the While
if (isEnd(cur) && isSafe(cur))
{
//System.out.println("cur's final : " + cur.toString());
end = cur;
break;
}
//mark cur as visited with a P
markVisited(cur, P);
//check the position above cur to see if it is
//
right = cur.getRight();
if (inBounds(right) && isSafe(right))
{
queue.add(right);
}
below = cur.getBelow();
if (inBounds(below) && isSafe(below))
{
queue.add(below);
}
left = cur.getLeft();
if (inBounds(left) && isSafe(left))
{
queue.add(left);
}
above = cur.getAbove();
if (inBounds(above) && isSafe(above))
{
queue.add(above);
}
}//while
//System.out.println("The queue size is: " + queue.size());
if (!queue.isEmpty())
{
System.out.println("The maze is solvable!");
}
else
{
System.out.println("The maze is unsolvable!");
}
print();
returnMaze(storedMaze);
}
队列为空并不能确定迷宫是否被解析。队列只是跟踪哪些空间仍然需要检查。来到迷宫的尽头是完全可以的,还有很多空间可以检查你的队列。
它看起来像如果你的如果(isEnd(cur)
所以,我有一个作业,要求我用递归解一个迷宫。我会把作业指导贴出来,这样你就能明白我在说什么了。教授没怎么解释递归,他给了我们一些递归的例子,我会发布这些例子,但我希望有人能给我一个更深入的递归解释,以及我如何将其应用于解决迷宫。我不是要求任何人编写代码,我只是希望一些解释能让我走上正确的道路。感谢所有回答的人。 以下是我的例子: 以下是指南: 你要创建一个迷宫爬虫能够解决任何迷宫你给它递归的力量!
我正在尝试创建一个可以通过递归解决迷宫的程序。我的代码基于可以在网上找到的几个步骤,特别是: if(x, y在迷宫外)返回false if(x, y是目标)返回true if(x, y not open)返回false 将x, y标记为解路径的一部分 if(FIND-PATH(x, y的北方)==true)返回true if(FIND-PATH(East of x, y)==true)返回true
我想用谷歌搜索一下,通过回溯来解决迷宫问题!我看到了这个算法:递归:解迷宫 这是: 查找路径(x,y) > 如果(x,y在迷宫外)返回false 如果(x,y是目标)返回true 如果(x,y未打开)返回false 将x、y标记为解决方案路径的一部分 if(FIND-PATH(x,y以北)=true)返回true if(FIND-PATH(x,y以东)=true)返回true 如果(FIND-PA
我正在尝试寻找到EndPotion的路径。这是一个递归函数。请帮助,我要自杀了。 这是给定的地图 我想递归地使用GetPath来到达上面地图中的EndPotion。参数是当前位置、结束位置和地图。对于这个例子,起始位置是(0,0)和结束,EndPotionis是(0,3),右上角。0代表墙壁,1代表路径。 我需要返回一个包含有效点的arraylist到结束位置。虽然我的数组大小始终为0,并且基本大
我是JMS新手,经过长时间的搜索,我搜索出了一个连接到JMS的代码,并发布了一条消息。 问题是我需要在远程队列中发布消息,但我不知道如何建立连接到它并发布消息。 服务器类型:TIBCO EMS 服务器主机:******。net 端口:**USername:user passsbrow:user123 队列:**。。。。顺序经营1. 我想建立连接,发布一条简单的消息,然后把它取回。请帮忙!提前谢谢
我一直在做一个需要同步队列的项目,因为我的程序是多线程的,线程可能会访问这个队列。我使用arraylist来实现这一点,但我似乎遇到了一些问题,线程陷入僵局。我不知道排队是否是原因,但我只是想检查一下: 编辑:即使使用LinkedBlockingQueue,我也会陷入与之前相同的循环中。我认为这是因为有一个线程正在等待队列被填充,但它从来没有这样做,因为其他功能已经完成运行…有什么想法吗???