0

私の宿題は、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) を使用して開始点をマークし、Point (row-1,col-1) を使用してゴールをマークする必要があります。

さらにコードが必要な場合はお知らせください。char 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 . 

m迷路の解き方

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

1 に答える 1

1

キューが空であっても、迷路が解けるかどうかはわかりません。キューは、まだチェックする必要があるスペースを追跡するだけです。キューにチェックインするためのスペースがたくさん残っている迷路の終わりに来るのはまったく問題ありません。

あなたif (isEnd(cur) && isSafe(cur)) がトリガーされた場合、迷路は解けるようです。

于 2012-10-28T23:30:07.190 に答える