首页 文章

将ASCII迷宫转录成图形

提问于
浏览
-1

我有一个如下的迷宫:

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)坐标映射到图形 .

1 回答

  • 0

    试试这个

    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();
         }
     }
    

相关问题