【发布时间】:2017-09-09 13:44:08
【问题描述】:
我在弄清楚图形的工作原理(DFS)方面是全新的。我已经阅读了许多关于如何使用 DFS 构建迷宫路径查找求解器的教程,其中有一部分我没有得到。我到底如何找出顶点的邻居是谁? Forinstens 我有这个迷宫: maze
我已将所有字符串放入一个名为“names”的二维数组中。所以如果我坚持写:
names[0,0] // it contains the string +
如果我写:
names[0,1] // it contains the string -
如果我写:
names[1,0] //it contains the string B
等等。但是 names[1,0] 怎么知道它的邻居是 names[0,0]、names[2,0] 和 names[1,1] 呢?
【问题讨论】:
-
您构建了一个具有四个属性的 Node 类:Up、Down、Left、Right,这表明一个 Node 是否在四个方向上都有一个邻居。所以你的迷宫是 Node[,] 迷宫。
-
@jdweng 但是节点如何知道它是否有邻居? Forinstens 假设我们有一个 A 指向 B 的有向图。A 怎么知道它指向 B,B 怎么知道它不指向 a?除非我当然进入并将每个邻居手动添加到每个节点?但由于有 400 个节点,这似乎是个坏主意。
-
没有。仔细观察迷宫。一些加号在它们之间有垂直/水平线,而另一些则没有。节点是 4 个加号之间的正方形。有 4 个属性是布尔值(邻居):上、下、左、右,可以有垂直/水平线。当存在垂直/水平线时,布尔值为真,表示由于方向被阻挡,因此没有邻居。当有邻居(无行)时,您可以加/减 1 以获取数组中的邻居位置。
-
@jdweng 抱歉,你完全把我弄丢了?你能举个例子吗?我真正不明白的是我有一个带有字符串的二维数组,这很棒,但似乎我无法使用该二维数组来查找任何邻居。所以我需要创建一个新的二维数组(所谓的邻接矩阵),在其中手动指出谁是谁的邻居。所以让我们说 [0,0] 有 [0,1] 作为邻居,然后我是否在 [0,1] 中放置一些东西,现在让我们说 [0,5] 有 [0,6] 作为邻居。他们如何据此知道谁是谁的邻居?
-
@cop77 您不需要显式的邻接矩阵。您知道每个位置的 4 个潜在邻居。对于位置
[i,j],您可以拥有[i-1,j]、[i+1,j]、[i,j-1]或[i,j+1]的邻居。如果这些潜在的邻居中的任何一个是a)在迷宫之外,或b)被空间以外的东西填充,那么它就不是邻居。
标签: c# multidimensional-array graph-algorithm maze