【发布时间】:2015-08-25 07:51:03
【问题描述】:
我正在尝试使用深度优先搜索创建一个迷宫,并且该算法运行良好,但我在控制台中实际绘制迷宫并通常表示迷宫时遇到问题。我之前的尝试包括表示网格的每个位置在一个 3x3 块中,对于每个位置,如果有一个墙,我会画一堵墙,但这会为左/右、上/下的每个方向提供 2 个墙。我的第二次尝试是尝试将迷宫放入一个维度为 + (dimension - 1) 的二维数组中,并将墙壁视为如下所示的线条:
这是我的尝试:
int dimTemp = dim + (dim - 1);
String[][] mazeDrawn = new String[dimTemp][dimTemp];
int posRow, posCol;
int nodeRow = 0;
int nodeCol;
for(int wallRow = 1; wallRow <= dimTemp; wallRow += 2)
{
if(wallRow >= dimTemp)
{
wallRow--;
posRow = wallRow;
}
else posRow = wallRow - 1;
nodeCol = 0;
for(int wallCol = 1; wallCol <= dimTemp; wallCol += 2)
{
if(wallCol >= dimTemp)
{
wallCol--;
posCol = wallCol;
}
else posCol = wallCol - 1;
Node current = maze[nodeRow][nodeCol];
mazeDrawn[posRow][posCol] = current.getPosValue();
if(current.right) mazeDrawn[posRow][wallCol] = "#";
else mazeDrawn[posRow][wallCol] = " ";
mazeDrawn[wallRow][wallCol] = "#";
if(current.down) mazeDrawn[wallRow][posCol] = "#";
else mazeDrawn[wallRow][posCol] = " ";
nodeCol++;
}
nodeRow++;
}
for(int row = 0; row < mazeDrawn.length; row++)
{
for(int col = 0; col < mazeDrawn.length; col++)
{
System.out.print(mazeDrawn[row][col]);
}
System.out.println();
}
这是一个 10x10 迷宫的输出,在我运行 DFS 之前,每个位置之间都有一堵墙,# 是“墙”和 .是职位
.#.#.#.#.#.#.#.#.##
###################
.#.#.#.#.#.#*#.#.##
###################
.#.#.#.#.#.#.#.#.##
###################
.#.#.#.#.#.#.#.#.##
###################
.#.#.#.#.#.#.#.#.##
###################
.#.#.#.#.#.#.#.#.##
###################
.#.#.#.#.#.#.#.#.##
###################
.#.#.#.#.#.#.#.#.##
###################
.#.#.#.#.#.#.#.#.##
###################
###################
底部和右侧边缘存在问题,应遵循它们之前的模式。我不确定这是否是表示迷宫的好方法。 还要澄清一下,我只是想打印到控制台。
【问题讨论】:
-
你的目标是用 # 和 . 代表迷宫吗?或者为迷宫实现一些算法。
-
因为如果您的主要目标是实现一些算法,那么我们总是使用 1 和 0 来表示迷宫,其中 1 表示没有墙,0 表示有墙,并且二维数组本身的尺寸会处理边界。
-
这就是我所做的,除了 char '#' 是一堵墙,我有一个更大的数组,这样边缘/墙就有自己的索引
-
所以主要是你有一个 1 和 0 的迷宫,然后你想打印一个 #(wall) 和 .(position) 的迷宫是你想要的吗?