在大小为m * n的矩形网格中,从(0,0)到(m,n)(没有回溯)的路径数是(m + n)!/(m!* n!)。现在,如果网格中有某些我们想要避免的点,我们如何计算避开这些点的路径数?
答案 0 :(得分:2)
定义解决方案的(递归)方程式如下:
显然,正如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