给定一个NxN矩阵,我怎样才能找到一个到位置的所有可能路径(i,i)?

时间:2012-07-31 13:50:34

标签: algorithm data-structures

给定NxN矩阵,我如何找到位置(i,i)的所有可能路径。导航仅为downwards并且朝向right。起点为(0,0)

P.S。不是作业。

6 个答案:

答案 0 :(得分:2)

到一个位置(i,i),即对角线上的一个位置,有精确的comb(i,2 * i)路径(从一组2 * i个元素中选择i个元素的方式的数量),每个包含我向右移动,向下移动列举它们是微不足道的。

答案 1 :(得分:2)

最简单的(对我而言)是递归地执行:

1)停止条件将到达(i,i)

2)你会在每个递归级别尝试两个下一个动作:

  • 你可以下去吗
  • 你能走对吗

假设您当前的位置是(x,y): 如果你当前的“y”加1比(i,i)中的“i”大,你就不能正确。 如果你当前的“x”加1大于(i,i)中的“i”,你就不能下去。

您只需记住某个变量中的路径或将其向下传递并在停止条件发生时将其打印出来。

所以假设你从(0,0)开始你记得这个,然后检查你是否可以向右或向下,如果两者都是,那么你递归地为(0,1)和(1,0)调用相同的方法

答案 2 :(得分:2)

虽然您可以使用DP来解决这个问题,但这只是简单的数学:

您必须执行2i步骤,i必须从右侧开始步骤。总组合为C(2i,i)。请参阅:computing the binomial coefficients

另一个类似的问题是你不能越过对角线,称为monotonic path,其中有趣的Catalan number序列就是解决方案。

答案 3 :(得分:1)

解决方案1 ​​ - 使用动态编程:

自下而上将解决方案添加到(i,j)索引:

  

ans(i,i)= ans(i-1,j)+ ans(i,j-1)

     

并将其用于位置(i,i)。

解决方案2 - 使用简单的排列和组合

  

ans =(2i)!/ i!i!

(因为你必须选择右边的任何一个步骤,从(0,0)开始向下ji步骤,总计是2i步骤)。

答案 4 :(得分:1)

从45度角看问题。您将看到您正在尝试计算三角形阵列上顶点的路径数。解决方案由Pascal's triangle提供。

2i choose i

答案 5 :(得分:1)

取决于您从(0,0)开始还是在矩阵中的随机位置。

如果是(0,0);使用Depth First直到一个分支结束,然后是其他分支。使用广度优先在一步中遍历所有邻居节点。 仅检查向下和向右节点。

如果它位于矩阵中的随机位置,则需要跟踪所有4个相邻节点。