为什么我的Java迷宫无法运行?

3
代码如下:
public void generateMaze(boolean Array[][], int val) 
{
    Stack<Integer> StackX = new Stack<Integer>();
    Stack<Integer> StackY = new Stack<Integer>();
    int x = val / 2; // Start in the middle
    int y = val / 2; // Start in the middle
    StackX.push(x);
    StackY.push(y);

    while(!StackX.isEmpty())
    {
        Array[x][y] = true; // is Visited
        x = StackX.peek();
        y = StackY.peek();

        if(Array[x][y+1] == false)
        {
            StackX.push(x);
            StackY.push(y+1);
            y = y + 1;
        }
        else if(Array[x][y-1] == false)
        {
            StackX.push(x);
            StackY.push(y-1);
            y = y - 1;
        } 
        else if(Array[x+1][y] == false)
        {
            StackX.push(x+1);
            StackY.push(y);
            x = x+1;
        } 
        else if(Array[x-1][y] == false)
        {
            StackX.push(x-1);
            StackY.push(y);
            x = x-1;
        } 
        else
        {
            StackX.pop();
            StackY.pop();
        }
    }
}

每次我打印迷宫时,似乎迷宫中的每个位置都返回为真值,并因此标记为星号。我做错了什么吗?任何帮助将不胜感激。

2
如果你的数组全部为“true”,那么你的其他逻辑可能存在问题。你提供给“generateMaze”的数组是由哪段代码生成的? - ameed
我没有以其他方式编辑代码。在我的void main中,我创建了数组,并将其放入方法中。我还创建了一个简单的打印方法来打印数组。我认为我的错误可能来自于每次访问邻居时只添加1的事实。但我不知道如何解决这个问题。 - svsav
1个回答

4
问题在于您使用布尔数组来表示两个不同的事情:
1)那里有一堵墙(在数组中最初设置为true)
2)您已经访问了该瓷砖(在迷宫求解器期间设置为true)
相反,您需要保留两个数组,并检查两个数组-不要走到墙上或已经检查过的瓷砖上,但是当您走到新的瓷砖上时,只将其设置为已检查,而不是墙。然后您就可以将-wall-reached by solver-unreached by solver打印为不同的字符。
(我假设generateMaze()名称不正确,并且实际上是在其他地方生成的迷宫。如果传递了一个空迷宫,那么问题就在于您需要先制作一个迷宫;))

谢谢你的帮助。我会尝试一下。你的假设是正确的 :) - svsav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接