2
我目前正在研究迷宮生成程序,使用深度優先搜索。我有以下代碼,但我無法弄清楚我做錯了什麼。我試圖讓X之間說出哪些是牆壁。但它會覆蓋它們,並將路徑放在一起。任何幫助都會很棒。以下是輸出。DFS迷宮發電機
. . . # # # # # # #
. . . . # . . . . .
. . . . # . # # # .
. . # . # . . . # .
. . # # # # # . # #
. . . . # . . . # #
. # # . # . # # # #
. # # . . . # # # #
. . . . . # # # # #
# # # # # # # # # #
import java.util.Random;
public class DepthFirstSearch {
private Stack stack;
public DepthFirstSearch() {}
public char[][] DFS (int size, char[][] maze) {
Random myRand = new Random();
stack = new Stack(size);
int x = myRand.nextInt(size);
while (x % 2 == 0)
x = myRand.nextInt(size);
int y = myRand.nextInt(size);
while (y % 2 == 0)
y = myRand.nextInt(size);
maze[x][y] = ' ';
int total = (size * size)/4;
int visited = 1;
int random[] = new int[4];
int totalrand;
while (visited < total) {
totalrand = 0;
if (x > 1 && maze[x - 2][y] == 'X')
random[totalrand++] = 1;
if (x < size - 2 && maze[x + 2][y] == 'X')
random[totalrand++] = 2;
if (y > 1 && maze[x][y - 2] == 'X')
random[totalrand++] = 3;
if (y < size - 2 && maze[x][y + 2] == 'X')
random[totalrand++] = 4;
if (totalrand > 0) {
switch(random[myRand.nextInt(totalrand)]) {
case 1: maze[x-2][y] = maze[x-1][y] = ' ';
x -= 2;
stack.push(x * size + y);
visited++;
break;
case 2: maze[x+2][y] = maze[x+1][y] = ' ';
x += 2;
stack.push(x * size + y);
visited++;
break;
case 3: maze[x][y-2] = maze[x][y-1] = ' ';
y -= 2;
stack.push(x * size + y);
visited++;
break;
case 4: maze[x][y+2] = maze[x][y+1] = ' ';
y += 2;
stack.push(x * size + y);
visited++;
break;
}
}
else {
int vert = stack.pop();
x = vert/size;
y = vert % size;
}
}
return maze;
}
}
我原本是把迷宮作爲一個字符數組,但是我看到有人在其他地方發帖使它成爲一個字符串和.equals()它。但相同的結果。 –
*(不是回答,因此評論)* ...按照慣例Java類名稱應該以大寫字母開頭(例如*你應該有'堆棧'而不是'堆棧')和小寫的方法,所以你明白了向後。此外,有一個名爲「dfs」的類/構造函數和一個名爲「DFS」的方法,並依靠區分大小寫來區分它們,這種情況充其量是令人困惑的。 – TacticalCoder
我已更新它。 –