0

我试图使用动态编程方法解决格子路径问题。

从 22 格的左上角开始,有 6 条路线(没有回溯)到右下角。

路线

2020 年网格中有多少条路线?

这是我为解决这个问题而编写的代码。我哪里错了。我似乎每次都得到错误的输出。我是否跨越了可变数据类型的一些界限?

#include <stdio.h>
int count = 0;
int limita,limitb;
long long int cache[20][20];
unsigned long long int start(int a,int b)
{
    unsigned int long long i = 0;
    if(a == limita && b == limitb)
        return 1;
    if(cache[a][b] != -1)
        return cache[a][b];
    if(a != limita)
        i += start(a+1, b);
    if(b != limitb)
        i += start(a, b+1);
    cache[a][b] = i;
    return i;
}
int main(void)
{
    limita = limitb = 19;
    int i,j;
    for(i = 0; i < 20; i++)
        for(j = 0; j <20;j++)
            cache[i][j] = -1;
    unsigned long long int number = start(0,0);
    printf("The number of ways to reach the end is %llu\n",number);
    return 0;
}

请帮帮我

4

1 回答 1

3

大小为 1*1 的网格:

    0    1
   0+-----+
    |     |
    |     |
   1+-----+
    |<-2->|

大小为 2*2 的网格:

    0    1    2
   0+----+----+
    |    |    |
    |    |    |
   1+----+----+
    |    |    |
    |    |    |
   2+----+----+
    |<---3--->|

...

您的算法似乎还可以,但是您计算的边数是错误的。

于 2012-09-17T07:37:57.430 回答