格子路径记忆

时间:2012-09-17 07:02:48

标签: algorithm

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

  

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

     

route

     

通过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;
}

请帮帮我

1 个答案:

答案 0 :(得分:3)

大小为1 * 1的网格:

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

大小为2 * 2的网格:

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

...

你的算法似乎没问题,但你的边缘错了。