避免某些点的矩形网格中的单调路径的数量

时间:2012-09-05 09:25:45

标签: algorithm

在大小为m * n的矩形网格中,从(0,0)到(m,n)(没有回溯)的路径数是(m + n)!/(m!* n!)。现在,如果网格中有某些我们想要避免的点,我们如何计算避开这些点的路径数?

3 个答案:

答案 0 :(得分:2)

定义解决方案的(递归)方程式如下:

  • 从(m,n)到(m,n)的单调路径的数量是1
  • 从任何禁区到(m,n)的单调路径数为0,第一个坐标大于m或第二个大于n的点相同。
  • 从任何其他点(x,y)到(m,n)的单调路径的数量是以下的总和:
    • 从(x + 1,y)到(m,n)和
    • 的路径数
    • 从(x,y + 1)到(m,n)的路径数量(见上文关于处理使我们离开网格的增量)

显然,正如Qnan所说,你需要使用动态编程(即记忆部分解决方案以避免指数时间)来解决(0,0)这些问题。

答案 1 :(得分:1)

我认为没有一个合理的分析解决方案可以阻止正好k点的网格,但可以使用动态编程算法对路径进行计数。

分析解决方案很麻烦,因为阻塞路径的数量不仅取决于被阻塞节点的数量和每个节点的位置,还取决于它们的相对位置。例如。在4x4网格中,这两种配置会产生截然不同的结果:

....      ....
..x.      .xx.
.x..      ....
....      ....

很容易看出,前者仅允许两条单调路径,而后者至少有5条。

答案 2 :(得分:0)

这里一个自然的问题是:对于任何给定的k,避免一组k个k点(其中最大值超过所有可能的集合S)的单调路径的最大数量是多少?

这实际上是Johnson,Leader和Russell在一篇论文中提出的一个公开问题:http://arxiv.org/pdf/1309.4643.pdf

相关问题