将ASCII迷宫转录成图形
我有一个迷宫,如下所示:
XXXOOOOX
OXXXOXOE
OXXOOXXO
OSXOXXXO
XOOOXOOO
//X = wall
//O = path
//S = startpoint
//E = endpoint
我想将其转录成一个图(邻接矩阵),但我不确定这是为了做到这一点。 邻接矩阵是布尔表列表,其中true表示可接收路径,false表示不可能路径(例如(0,-1)
在迷宫中不能连接到(7,-1)
(0,0是最左上角的节点))。 我不知道如何转录这个,我最好的猜测是将每个元素放在一个列表中,然后是一个具有连接节点的子列表。 鉴于这个迷宫的大小,处理起来很困难,所以这是一个较小的问题:
X E || A B
S O || C D
上述迷宫中的邻接矩阵是否会低于(1 =真,0 =假)?
A B C D
A 0 0 0 0
B 0 0 0 1
C 0 0 0 1
D 0 1 1 0
//C connects to D (start)
//D connects to B (end)
这真是令人困惑,我不确定如何将x,y(有时也是z)坐标映射到图表。
尝试这个
static void set(boolean[][] paths, int cols, int row0, int col0, int row1, int col1) {
int index0 = row0 * cols + col0;
int index1 = row1 * cols + col1;
paths[index0][index1] = paths[index1][index0]= true;
}
static boolean[][] paths(String[] maze) {
int rows = maze.length;
int cols = maze[0].length();
boolean[][] paths = new boolean[rows * cols][rows * cols];
for (int i = 0; i < rows; ++i) {
for (int j = 0; j < cols; ++j) {
if (maze[i].charAt(j) == 'X')
continue;
if (i + 1 < rows && maze[i + 1].charAt(j) != 'X')
set(paths, cols, i, j, i + 1, j);
if (j + 1 < cols && maze[i].charAt(j + 1) != 'X')
set(paths, cols, i, j, i, j + 1);
}
}
return paths;
}
public static void main(String[] args) {
String[] maze = {
"XXXOOOOX",
"OXXXOXOE",
"OXXOOXXO",
"OSXOXXXO",
"XOOOXOOO",
};
boolean[][] paths = paths(maze);
for (boolean[] row : paths) {
for (boolean cell : row)
System.out.print(cell ? "1" : "0");
System.out.println();
}
}
链接地址: http://www.djcxy.com/p/79625.html