查找char数组中的路径

时间:2014-04-22 11:05:20

标签: c++ arrays algorithm path-finding

我正在开展一个项目,我发现自己处于一个n x n char符号阵列a,b or c的位置我必须检查是否有路径b位于第一行和最后一行之间。 示例是输入:

enter image description here

我被困在这一点上?我应该采用一些众所周知的图搜索算法,还是有更好的方法来解决这个问题?我应该添加一个bool数组来标记我访问过哪个单元格吗? 在此先感谢您的时间!

2 个答案:

答案 0 :(得分:1)

是的,您应该采用图算法来查找从源到目标的路径。在您的情况下,您有多个来源(第一行中的所有'b')和多个目标(最后一行中的'b')。

通过易于实现的BFS,可以非常有效地解决未加权图上的最短路径。处理多个源的唯一区别是使用第一行(而不是单个节点)上的所有'b'来初始化队列。

在图表中,每个'b'单元格都是一个节点,每两个相邻的'b'单元格之间有一条边。

请注意,BFS已完成(如果存在,则始终找到解决方案)和最佳(找到最短路径)。

答案 1 :(得分:1)

最简单的方法是分配一个大小相等的零填充2D阵列,标记起点,并使用char数组作为指导进行填充填充。当洪水填充终止时,您可以轻松检查是否已标记终点。

洪水填充可以通过多种方式实施,只要您的问题规模很小,您的工作方式并不重要。

  • 通常,最简单的方法是以递归方式进行。递归泛洪填充的唯一问题是可能导致的巨大递归深度,因此,无论递归版本是否适用,它实际上取决于问题大小。

  • 如果时间不重要,你可以简单地迭代地做,多次遍历整个数组,标记已经标记为邻居的点并且是b s,直到迭代没有标记任何点

  • 如果你需要有效地处理大型数组,你应该进行广度优先的洪水填充,保持前沿像素的队列,你以先进先出的方式处理。