我只是想利用產生最簡單的算法一些迷宮,但我所有的迷宮看起來像下列操作之一:迷宮代使用DFS失敗,我不知道爲什麼
這裏是一塊Java代碼(一whatVisit功能的工作原理是正確的,不要看它):
private void dfs(Point start, boolean[][] visited) {
Point nextCell = whatVisit(start, visited);
if(nextCell == null) // if there's nothing to visit
return;
// mark current cell as visited
visited[start.y][start.x] = true;
// destroy the wall between current cell and the new one
borders[(start.y + nextCell.y)/2][(start.x + nextCell.x)/2] = true;
// start a new search from found cell
dfs(nextCell, visited);
}
private Point whatVisit(Point p, boolean[][] visited) {
Vector<Point>cells = new Vector<Point>(); // to store acessible cells
// lookaround
if(p.x - 2 >= 0 && !visited[p.y][p.x - 2])
cells.add(new Point(p.x - 2, p.y));
if(p.x + 2 < visited[0].length && !visited[p.y][p.x + 2])
cells.add(new Point(p.x + 2, p.y));
if(p.y - 2 >= 0 && !visited[p.y - 2][p.x])
cells.add(new Point(p.x, p.y - 2));
if(p.y + 2 < visited.length && !visited[p.y + 2][p.x])
cells.add(new Point(p.x, p.y + 2));
// instead of Random
Collections.shuffle(cells);
// returns null if there are no acessible cells around
if(cells.size() > 0)
return cells.get(0);
else return null;
}
而且我知道爲什麼它不工作!當DFS終於來到沒有可訪問單元的地方時,它就會返回開始。
如何解決這個問題,並強制工作正確?
謝謝。
而是回到開始的,你想在沒有進入細胞時,DFS涉及到地方發生什麼事情?我想,我自己的傾向可能是嘗試從已經創建的路徑的某個地方開始另一個路徑搜索,並且可能會進入和退出。 –