Volevo solo generare alcuni labirinti utilizzando l'algoritmo più semplice, ma tutti i miei labirinti apparire come il seguente:generazione Maze utilizzando DFS non riesce e non so il motivo per cui
Ecco un pezzo di codice Java (una funzione whatVisit funziona correttamente, non guardare):
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;
}
E so il motivo per cui non funziona! Quando finalmente DFS arriva nel punto in cui non ci sono celle accessibili, torna indietro per iniziare.
Come risolvere questo problema e forzare il corretto funzionamento?
Grazie.
Invece di tornare all'inizio, cosa ti piacerebbe accadere quando DFS arriva nel punto in cui non ci sono celle accessibili? Immagino che la mia stessa inclinazione potrebbe essere quella di provare a iniziare un'altra ricerca di percorso da qualche parte nel percorso/i già creato, e magari fare un'entrata e un'uscita. –