我在这里关注本指南: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)?
位置存储x,y和z。 不是我试图问你的事。
答案 0 :(得分:3)
您可以使用Stack来实现此目的:
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();
答案 1 :(得分:3)
LIFO结构最好使用Deque
对象而不是Stack
在Java中实现。 Stack
类扩展Vector
,仅用于向后兼容。
要使用Deque
,最好的办法是使用实现LinkedList
界面的Deque
。
Deque<Location> locationStack = new LinkedList<Location>();
或ArrayDeque
:
Deque<Location> locationStack = new ArrayDeque<Location>();
然后使用push
和pop
方法推送和弹出Location
个对象。
Stack
类有一堆同步开销,或多或少没用,只会导致代码在进入和退出同步代码时变慢。
答案 2 :(得分:0)
以下代码按您添加的顺序存储值。
List<Location> visitedCells = new ArrayList<Location>();
然后你可以打电话
Collections.reverse(visitedCells);
为您提供反向排序列表。
(或)
您可以使用ArrayDeque