【发布时间】:2017-05-19 14:18:57
【问题描述】:
我正在处理一个迷宫问题,其中迷宫以二维数组表示,因此如果元素为假,则该正方形无法通过,反之亦然。我已经实现了一种求解方法,它递归地尝试以深度优先的方式遍历起点的所有相邻方格,它应该可以正常工作。
然而,我想尝试击败 DFS 算法,并且我有将迷宫简化为图形的想法(并可能尝试为边缘分配权重)并在图形上进行 DFS,而不是每个迷宫中的单个正方形。我遇到的问题是,我把迷宫变成抓斗的方式似乎效率很低。这是将布尔矩阵转换为图形的方法的概述:
我从第 0 行开始,遍历从索引 0, 0 到索引 n,0 的每一行,然后是 0,1 .. n, 1 直到 n,n。编辑:澄清:我让迷宫沿线的 x 值首先增加。然后我在下一段中垂直链接节点。
我将把矩阵中的真实值称为开放正方形。 *如果棋盘边缘有一个白色方块,我会创建一个新的节点类的子类,称为Opening。我将保留对该节点的引用。继续向右,如果我遇到十字路口或下一个方块是黑色的,我会在两者之间创建一个节点和一个端点。如果我从一个黑色方块走到一个白色方块,并且如果右边的下一个方块不是黑色的,我会创建一个节点,并在该节点和沿行的下一个节点之间创建一条边。
所有节点都被添加到节点列表中。然后,我从 (0, 0), (0, 1), ..., (0, n), (1, 0), (1, 1).. (1, n) 遍历所有列。 . 并在所有没有被黑色方块分隔的节点之间制作边。
感觉这是一种非常昂贵的处理方式。我很想听听有关如何正确执行此操作的任何建议。
F F F F F F F F F F F F F
T T F T T T T T T T T T F
F T F F F F F F F T F F F
F T T T F T T T F T F T F
F F F T F T F T F F F T F
F T F T F T F T T T T T F
F T F T F T F F F F F F F
F T T T F T T T T T T T F
F T F F F F F F F F F T F
F T F T T T T T T T T T F
F T F T F F F F F F F T F
F T T T F T T T T T T T T
F F F F F F F F F F F F F
将制作这些节点:
. . . . . . . . . . . . .
O O . O . . . . . O . O .
. . . . . . . . . . . . .
. O . O . O . O . . . . .
. . . . . . . . . . . . .
. . . . . . . O . . . O .
. . . . . . . . . . . . .
. O . O . O . . . . . O .
. . . . . . . . . . . . .
. . . O . . . . . . . O .
. . . . . . . . . . . . .
. O . O . O . . . . . O O
. . . . . . . . . . . . .
这并没有显示边缘,但也许你明白了。
【问题讨论】:
-
我有一个方法,我回家后会尝试...今天是星期五:p