private
void
run(){
setRoadData(-1, -1);
RandomQueue<Position> queue =
new
RandomQueue<Position>();
Position first =
new
Position(data.getEntranceX(), data.getEntranceY()+1);
queue.add(first);
data.visited[first.getX()][first.getY()] =
true
;
data.openMist(first.getX(), first.getY());
while
(queue.size() != 0){
Position curPos = queue.
remove
();
expand(curPos, queue);
}
setRoadData(-1, -1);
}
void
expand(Position cur, RandomQueue<Position> q){
ArrayList<Integer> dirs =
new
ArrayList<>();
for
(
int
i = 0; i < 4; i ++) dirs.add(i);
Collections.shuffle(dirs);
for
(
int
i = 0 ; i < 4 ; i ++){
int
newX = cur.getX() + d[dirs.get(i)][0]*2;
int
newY = cur.getY() + d[dirs.get(i)][1]*2;
if
(data.inArea(newX, newY) && !data.visited[newX][newY]){
Position newPosition =
new
Position(newX, newY);
q.add(newPosition);
data.visited[newX][newY] =
true
;
data.openMist(newX, newY);
setRoadData(cur.getX() + d[dirs.get(i)][0], cur.getY() + d[dirs.get(i)][1]);
if
(Math.random() < 0.9) expand(newPosition, q);
}
}
}