我试图使用动态编程方法解决Lattice路径问题。
从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;
}
请帮帮我
答案 0 :(得分:3)
大小为1 * 1的网格:
0 1
0+-----+
| |
| |
1+-----+
|<-2->|
大小为2 * 2的网格:
0 1 2
0+----+----+
| | |
| | |
1+----+----+
| | |
| | |
2+----+----+
|<---3--->|
...
你的算法似乎没问题,但你的边缘错了。