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();
        }
    }
}

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

4

1 回答 1

4

问题是您使用布尔数组来指示两个不同的事物:

1)那里有一堵墙(最初在数组中设置为true)

2)您访问过该图块(在迷宫求解器中设置为 true)

相反,您需要保留两个阵列,并检查两者 - 不要走到墙上或选中的瓷砖上,但是当您走到新瓷砖上时,只需将其设置为已检查,而不是墙壁。然后,您将能够将 -wall -reached by solver -unreached by solver 打印为不同的字符。

(我假设 generateMaze() 命名错误,实际上是通过了一个在其他地方制作的生成迷宫。如果它通过了一个空迷宫,那么问题是你需要先制作一个迷宫;))

于 2013-03-15T00:20:14.610 回答