我正在开展一个项目,我发现自己处于一个n x n
char
符号阵列a,b or c
的位置我必须检查是否有路径b
位于第一行和最后一行之间。
示例是输入:
我被困在这一点上?我应该采用一些众所周知的图搜索算法,还是有更好的方法来解决这个问题?我应该添加一个bool
数组来标记我访问过哪个单元格吗?
在此先感谢您的时间!
答案 0 :(得分:1)
是的,您应该采用图算法来查找从源到目标的路径。在您的情况下,您有多个来源(第一行中的所有'b')和多个目标(最后一行中的'b')。
通过易于实现的BFS,可以非常有效地解决未加权图上的最短路径。处理多个源的唯一区别是使用第一行(而不是单个节点)上的所有'b'来初始化队列。
在图表中,每个'b'单元格都是一个节点,每两个相邻的'b'单元格之间有一条边。
请注意,BFS已完成(如果存在,则始终找到解决方案)和最佳(找到最短路径)。
答案 1 :(得分:1)
最简单的方法是分配一个大小相等的零填充2D阵列,标记起点,并使用char
数组作为指导进行填充填充。当洪水填充终止时,您可以轻松检查是否已标记终点。
洪水填充可以通过多种方式实施,只要您的问题规模很小,您的工作方式并不重要。
通常,最简单的方法是以递归方式进行。递归泛洪填充的唯一问题是可能导致的巨大递归深度,因此,无论递归版本是否适用,它实际上取决于问题大小。
如果时间不重要,你可以简单地迭代地做,多次遍历整个数组,标记已经标记为邻居的点并且是b
s,直到迭代没有标记任何点
如果你需要有效地处理大型数组,你应该进行广度优先的洪水填充,保持前沿像素的队列,你以先进先出的方式处理。