坐标系从(0,0)点走到(9,9)点,只能向右或者向上走,其中有些点不能走,问有多少种走法?
如图:假如。的位置不能走。(希望图能分辨清,左下角是(0,0))
..........
..........
..........
..。。......
....。.....
..........
..........
..........
..........
..........
DP方程是:
F[0][k] = 1,F[k][0] = 1;
而对于i,j > 0,有
F[i][j] = F[i-1][j] + F[i][j-1], 若(i,j)不是障碍点;
F[i][j] = 0 若(i,j)是障碍点 ;
F[9][9]即是结果
代码:
const int N = 10 ;
int F[N][N] ;
int C[N][N] ;
for ( int i = 0 ; i < N ;i++)
{
for ( int j = 0 ;j < N ;j++)
{
C[i][j] = 1;
}
}
C[6][2] = 0;
C[6][3] = 0;
C[5][4] = 0;
for (int k = 0 ; k < N ; k++)
{
F[0][k] = 1;
F[k][0] = 1;
}
for ( int i = 1 ; i < N ;i++)
{
for ( int j = 1 ;j < N ;j++)
{
if(C[i][j] == 1)
F[i][j] = F[i-1][j] + F[i][j-1]; //若(i,j)不是障碍点;
else
F[i][j] = 0;
}
}
printf("%d",F[N-1][N-1]);