我试图解决这个问题:
有一个包含r行和c列的网格。坐在左上角牢房里的机器人只能向两个方向移动,右下。但某些细胞必须避免,机器人不能踩到它们。从左上角到右下角为机器人找到一条路径。
这个问题特别需要一条路径,这似乎是直截了当的:
将网格设置为布尔[][]
,我得到的伪代码是
List<String> path = new ArrayList<String>()
boolean found = false
void getPath(r, c){
if (!found) {
if ( (r or c is outofbounds) || (!grid[r][c]) )
return
if (r==0 AND c==0) // we reached
found = true
getPath(r-1, c)
getPath(r, c-1)
String cell = "(" + r + ", " + c + ")"
path.add(cell)
}
}
尽管我想知道如何获得所有可能的路径(不仅是计数,还有路径值)。注意,它有r行和c列,所以它不是nxn网格。我试图想出一个DP/递归的解决方案,但却找不到任何解决方案,而且陷入了困境。很难想象递归是以两种方式进行的。
有什么建议吗?此外,对于如何“思考”此类问题的任何一般性帮助,我们都将不胜感激:)。
有什么建议吗?此外,对于如何“思考”此类问题的任何一般性帮助,我们都将不胜感激:)。
解决问题的方法:
实际上,你不需要构造图,因为边的集合非常清晰,或者像通常一样进行拓扑排序,矩阵的迭代(增量行索引和增量列索引)是这种隐式图的拓扑排序。
计算后,答案存储在dp[n-1][m-1]
中,n
是行数,m
是列数。总运行时间为O(nm)
。
如何找到所有可能的有效路径:
通常的回溯是有效的,我们可以通过应用早期修剪来加速回溯。事实上,如果我们计算dp
矩阵,然后从单元[n-1][m-1]
进行回溯,我们可以避免机器人进入dp
值为零的单元时出现无效路径。
预先计算了dp
矩阵的Python代码:
n, m = 3, 4
bad = [[False, False, False, False],
[ True, True, False, False],
[False, False, False, False]]
dp = [[1, 1, 1, 1],
[0, 0, 1, 2],
[0, 0, 1, 3]]
paths = []
curpath = []
def getPath(r, c):
if dp[r][c] == 0 or r < 0 or c < 0:
return
curpath.append((r, c))
if r == 0 and c == 0:
paths.append(list(reversed(curpath)))
getPath(r - 1, c)
getPath(r, c - 1)
curpath.pop()
getPath(n - 1, m - 1)
print(paths)
# valid paths are [[(0, 0), (0, 1), (0, 2), (0, 3), (1, 3), (2, 3)],
# [(0, 0), (0, 1), (0, 2), (1, 2), (1, 3), (2, 3)],
# [(0, 0), (0, 1), (0, 2), (1, 2), (2, 2), (2, 3)]]
请注意,这与您的代码非常相似,需要将所有有效路径存储在一起,并注意附加列表是curpath
的副本,以避免以空列表结束。
我不明白下面这个问题的路径数是(xy)/十、Y我理解它来自于从一个X-Y项目路径中选择X项目,但为什么它不选择X项目而不是X-Y选择Y项目而不是X-Y呢?为什么只有x? 机器人位于m x n网格的左上角(下图中标记为“开始”)。机器人只能在任何时间点向下或向右移动。机器人正试图到达网格的右下角(下图中标记为“Finish”)。有多少条可能的路径? 所有这些路径都是唯一的吗? 我怎么确定? 回溯算法
Random#nextLong()文档指出,此方法不会返回所有可能的长值: 返回此随机数生成器序列中的下一个伪随机、均匀分布的long值。的一般约定是伪随机生成并返回一个long值。方法由Random类实现,就好像通过: 因为类Random使用的种子只有48位,所以该算法不会返回所有可能的长值。 例如,数字是可生成的,但数字不是,即使它们唯一的区别是一个最低有效位,并且值本身是63位长。 有一种方
我需要以编程方式获取所有路由的路径列表。 我尝试了-在L5中不工作-不是静态方法。 我敢打赌,我可以从获取,但我不知道怎么做。
我有一个随机二叉树,形式如下 12个 13,14 29, 26, 89 每个节点有两个子节点,即(12- 树的分类 根左=树(13) 根右=树(14) 根正当左=树(26) 根左边右=树(26) 根左边左=树(29) 根正当右=树(86)
问题内容: 我有一个使用Node.js和Express构建的Web应用程序。现在,我想用适当的方法列出所有已注册的路由。 例如,如果我执行过 我想检索一个对象(或等效的东西),例如: 这可能吗?如果可以,怎么办? 更新: 同时,我创建了一个名为get-routes的npm软件包,该软件包从给定的应用程序中提取路由,从而解决了此问题。当前,仅支持Express 4.x,但我想现在可以了。仅供参考。
我有两个数组: