代码:
public void generateMaze(boolean Array[][], int val)
{
Stack<Integer> StackX = new Stack<Integer>();
Stack<Integer> StackY = new Stack<Integer>();
int x = val / 2; // Start in the middle
int y = val / 2; // Start in the middle
StackX.push(x);
StackY.push(y);
while(!StackX.isEmpty())
{
Array[x][y] = true; // is Visited
x = StackX.peek();
y = StackY.peek();
if(Array[x][y+1] == false)
{
StackX.push(x);
StackY.push(y+1);
y = y + 1;
}
else if(Array[x][y-1] == false)
{
StackX.push(x);
StackY.push(y-1);
y = y - 1;
}
else if(Array[x+1][y] == false)
{
StackX.push(x+1);
StackY.push(y);
x = x+1;
}
else if(Array[x-1][y] == false)
{
StackX.push(x-1);
StackY.push(y);
x = x-1;
}
else
{
StackX.pop();
StackY.pop();
}
}
}
每当我打印我的迷宫时,似乎迷宫中的每个点都会返回一个真值,因此标有星号。有什么我做错了,任何帮助将不胜感激。
答案 0 :(得分:4)
问题是你使用布尔数组来表示两个不同的东西:
1)那里有一堵墙(最初在数组中设置为true)
2)您访问过该图块(在迷宫求解器中设置为true)
相反,您需要保留两个阵列,并检查两者 - 不要走到墙上或走到已检查的瓷砖上,但是当您走到新的瓷砖上时,只需将其设置为已选中,而不是墙。然后你就可以通过解算器将解决方法 - 解决方法作为不同的字符打印出来.-
(我假设generateMaze()被错误命名并且实际上传递了在其他地方生成的迷宫。如果它传递了一个空的迷宫,那么问题就是你需要先制作一个迷宫;))