「算法基礎」迷宮生成

迷宮本質上是一棵樹或一張圖。

根據劉老師的思維:迷宮最初狀態

「算法基礎」迷宮生成

//通過隨機隊列,產生隨機節點(類似於廣度)

import java.util.ArrayList;

public class RandomQueue{

private ArrayList queue;

public RandomQueue(){

queue = new ArrayList();

}

public void add(E e){

queue.add(e);

}

public E remove(){

if(queue.size() == 0)

throw new IllegalArgumentException("There's no element to remove in Random Queue");

int randIndex = (int)(Math.random()*queue.size());

E randElement = queue.get(randIndex);

queue.set(randIndex, queue.get(queue.size()-1));

queue.remove(queue.size()-1);

return randElement;

}

public int size(){

return queue.size();

}

public boolean empty(){

return size() == 0;

}

}

//隨機隊列,類似於深度

import java.util.LinkedList;

public class RandomQueue{

private LinkedList queue;

public RandomQueue(){

queue = new LinkedList();

}

public void add(E e){

if(Math.random() < 0.5)

queue.addFirst(e);

else

queue.addLast(e);

}

public E remove(){

if(queue.size() == 0)

throw new IllegalArgumentException("There's no element to remove in Random Qeuue");

if(Math.random() < 0.5)

return queue.removeFirst();

else

return queue.removeLast();

}

public int size(){

return queue.size();

}

public boolean empty(){

return size() == 0;

}

}

//隨機生成

private void run(){

setData(-1, -1);

RandomQueue queue = new RandomQueue();

Position first = new Position(data.getEntranceX(), data.getEntranceY()+1);

queue.add(first);

data.visited[first.getX()][first.getY()] = true;

while(queue.size() != 0){

Position curPos = queue.remove();

for(int i = 0 ; i < 4 ; i ++){

int newX = curPos.getX() + d[i][0]*2;

int newY = curPos.getY() + d[i][1]*2;

if(data.inArea(newX, newY)

&& !data.visited[newX][newY]

&& data.maze[newX][newY] == MazeData.ROAD){

queue.add(new Position(newX, newY));

data.visited[newX][newY] = true;

setData(curPos.getX() + d[i][0], curPos.getY() + d[i][1]);

}

}

}

setData(-1, -1);

}


需要完整代碼請關注學點乾貨,點贊並轉發此文,私信乾貨菌獲取。


分享到:


相關文章: