【发布时间】:2020-09-30 06:23:49
【问题描述】:
我正在尝试解决这个问题:
有一个包含 r 行和 c 列的网格。坐在左上角单元格中的机器人只能在两个方向上移动,向右和向下。但是必须避开某些细胞,机器人不能踩到它们。从左上角到右下角为机器人找到一条路径。
这个问题特别要求一个单一的路径,这似乎很简单:
网格为boolean[][],我的伪代码是
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/递归解决方案,但无法提出任何解决方案并卡住了。当递归有两种方式时,很难想象。
任何指针?并且任何关于如何“思考”这些问题的一般帮助将不胜感激:)。
【问题讨论】:
标签: recursion dynamic-programming