计算N×N网格中每条路径的算法,非重复

时间:2012-05-08 11:25:51

标签: algorithm graph matrix graph-algorithm

我有一个NxN单元网格(想象一下如下定义的二维数组Array [N] [N])。

哪个算法将从每个单元a [i] [j]计算每条路径到每个单元a [k] [l]其中:

  1. 单个路径中不包含两次单元格。
  2. 只有相邻对角线,水平和垂直移动都是合法的。
  3. 算法平均来说速度最快。
  4. 使用最少的内存。

2 个答案:

答案 0 :(得分:1)

广度优先搜索将完全符合您的要求。生成所有路径时,没有最快的

答案 1 :(得分:0)

我假设您想要实际路径,而不仅仅是它们的数量。

您可以使用在{strong>相同路径中探索的顶点上设置visited的{​​{3}}来实现它,并避免探索已在同一路径中发现的顶点路径。

伪码:

DFS(v,target,visited):
   if (v == target):
      print path to v from the initial sorce
      return
   visited.add(v)
   for each vertex u such that u is a neighbor of v:
      if (u is not in visited):
          u.parent <- v
          DFS(u,target,visited)
   visited.remove(v)

调用with DFS(source,target,{}) [其中{}为空visited集合。