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

問題は、ブール配列を使用して2つの異なることを示すことです。

1)そこに壁があること(最初はアレイでtrueに設定されています)

2)タイルにアクセスしたこと(迷路ソルバー中にtrueに設定)

代わりに、2つの配列を保持し、両方をチェックする必要があります。壁やチェックされたタイルの上を歩かないでください。ただし、新しいタイルの上を歩くときは、壁としてではなく、チェック済みとして設定するだけです。次に、-wall -reachedbysolver-unreachedbysolverを別の文字として印刷できるようになります。

(私は、generateMaze()の名前が間違っていて、実際には別の場所で作成された生成された迷路が渡されると想定しています。空の迷路が渡された場合、問題は、最初に迷路を作成する必要があることです;))

于 2013-03-15T00:20:14.610 に答える