2

私はこのガイドに従っています: http://www.mazeworks.com/mazegen/mazetut/index.htm

またはより具体的に

create a CellStack (LIFO) to hold a list of cell locations 
set TotalCells = number of cells in grid 
choose a cell at random and call it CurrentCell 
set VisitedCells = 1 

while VisitedCells < TotalCells 

find all neighbors of CurrentCell with all walls intact  
if one or more found 
    choose one at random 
    knock down the wall between it and CurrentCell 
    push CurrentCell location on the CellStack 
    make the new cell CurrentCell 
    add 1 to VisitedCells else 
    pop the most recent cell entry off the CellStack 
    make it CurrentCell endIf 

endWhile

私はJavaでこれを書いています、私の問題は.

訪問したセルをどのように保存すればよいので、配置したときと逆の順序でアクセスできるようにします。

このような?

List<Location> visitedCells = new ArrayList<Location>();

Then do I grab with visitedCells.get(visitedCells.size()-1)?

Location には x、y、z が格納されます。私があなたに尋ねようとしているものではありません。

4

3 に答える 3

3

この目的でスタックを使用できます。

Stack<Location> visitedCells = new Stack<Location>();
visitedCells.push(myLocation1);
visitedCells.push(myLocation2);

// Get last one in but DONT remove
Location location2 = visitedCells.peek(); 

// Get last one in and remove
location2 = visitedCells.pop(); 
于 2012-09-04T21:36:24.053 に答える
3

LIFO 構造は、JavaDequeではなくオブジェクトを使用して実装するのが最適ですStackStackクラスは拡張され、下位互換性のVectorためにのみ保持されます。

を使用するには、インターフェイスを実装するDequeを使用するのが最善の策です。LinkedListDeque

Deque<Location> locationStack = new LinkedList<Location>();

またはArrayDeque:

Deque<Location> locationStack = new ArrayDeque<Location>();

次に、 メソッドpushpopメソッドを使用して、オブジェクトをプッシュおよびポップしLocationます。

このStackクラスには、多かれ少なかれ役に立たない同期オーバーヘッドがたくさんあり、同期されたコードに出入りするときにコードの速度が低下するだけです。

于 2012-09-04T22:02:05.407 に答える
0

次のコードは、追加した順序で値を格納します。

List<Location> visitedCells = new ArrayList<Location>();

その後、あなたは呼び出すことができます

Collections.reverse(visitedCells);

逆順のリストを提供します。

(また)

ArrayDequeを使用できます

于 2012-09-04T21:32:45.710 に答える