在大小为 m*n 的矩形网格中,从 (0,0) 到 (m,n) 的路径数(没有回溯)是 (m+n)!/(m!*n!)。现在,如果网格中有我们想要避开的某些点,我们如何计算避开这些点的路径数?
问问题
2509 次
3 回答
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)。
于 2012-09-05T09:49:39.223 回答
1
我认为对于完全k
被阻塞的网格没有合理的分析解决方案,但是可以使用动态编程算法计算路径。
解析解很麻烦,因为阻塞路径的数量不仅取决于阻塞节点的数量和每个节点的位置,还取决于它们的相对位置。例如,在 4x4 网格中,这两种配置给出了非常不同的结果:
.... ....
..x. .xx.
.x.. ....
.... ....
很容易看出,前者只允许两条单调路径,而后者至少有 5 条。
于 2012-09-05T09:36:33.080 回答
0
这里一个自然的问题是要问:对于任何给定的 k,避免 k 个点的集合 S 的单调路径的最大数量是多少(其中最大值是所有可能的集合 S)?
这实际上是 Johnson、Leader 和 Russell 的一篇论文中提出的一个开放问题:http: //arxiv.org/pdf/1309.4643.pdf
于 2015-08-06T15:20:58.687 回答