【问题标题】:grid unique paths - recursion网格唯一路径 - 递归
【发布时间】:2017-01-02 00:13:37
【问题描述】:

我正在尝试解决网格唯一路径问题。该问题涉及在从左上角 (0,0) 到右下角(例如 A,B)的 2D 网格中查找可能的唯一路径的数量。一个人只能向右或向下移动。这是我最初的尝试:

#include <stdio.h>

int count=0;
void uniquePathsRecur(int r, int c, int A, int B){
    if(r==A-1 & c==B-1){
        count++;
        return;
    }
    if(r<A-1){
        return uniquePathsRecur(r++,c,A,B);
    }
    if(c<B-1){
        return uniquePathsRecur(r,c++,A,B);
    }

}

int uniquePaths(int A, int B) {

    if(B==1 | A==1){
        return 1;
    }

    uniquePathsRecur(0,0,A,B);
    return count;
}


int main(){

printf("%d", uniquePaths(5,3));

return 0;
}

我的代码最终出现分段错误:11。我尝试在 gdb 中调试,我得到以下信息:

lldb) target create "a.out"
Current executable set to 'a.out' (x86_64).
(lldb) r
Process 12171 launched: '<path to process>/a.out' (x86_64)
Process 12171 stopped
* thread #1: tid = 0x531b2e, 0x0000000100000e38 a.out`uniquePathsRecur + 8, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=2, address=0x7fff5f3ffffc)
    frame #0: 0x0000000100000e38 a.out`uniquePathsRecur + 8
a.out`uniquePathsRecur:
->  0x100000e38 <+8>:  movl   %edi, -0x4(%rbp)
    0x100000e3b <+11>: movl   %esi, -0x8(%rbp)
    0x100000e3e <+14>: movl   %edx, -0xc(%rbp)
    0x100000e41 <+17>: movl   %ecx, -0x10(%rbp)
(lldb)

上面的代码有什么问题?

【问题讨论】:

    标签: recursion path grid


    【解决方案1】:

    我不知道你的代码有什么问题。但是您可以在不使用递归的情况下解决问题。

    方法一:我们可以用简单的数学技巧来解决这个问题。这 要求是您只能向下或向右移动 观点。所以它需要从 S 到 D 的精确 (m + n) 步以及 (m) 中的 n 个 + n) 步数下降。因此,答案是 C(m + n, n)。

    方法2:让我们以计算机科学的方式解决问题。这是典型的动态 编程问题。让我们假设机器人站在 (i, j) 处。 机器人是如何到达 (i, j) 的?机器人可以从(i - 1, j) 或从 (i, j - 1) 向右移动。所以到 (i, j) 的路径等于到 (i - 1, j) 的路径和到 (i, j - 1) 的路径之和。我们可以用 另一个数组来存储所有节点的路径并使用等式 下面:paths(i, j) = 1 // i == 0 或 j == 0 paths(i, j) = paths(i - 1, j) + paths(i, j - 1) // i != 0 and j != 0 但是,给定更多 想法,你会发现你实际上并不需要一个二维数组来 记录所有值,因为当机器人在第 i 行时,您只需要 (i - 1) 处的路径。所以等式是:paths(j) = 1 //j == 0 for 任何 i 路径(j) = 路径(j - 1) + 路径(j) // j != 0 对于任何 i

    更多信息,请看这里:https://algorithm.pingzhang.io/DynamicProgramming/unique_path.html

    【讨论】:

      猜你喜欢
      • 2016-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 2021-07-21
      • 2014-11-01
      相关资源
      最近更新 更多