递推递归练习 中的L题

题意就是求点从(0,0)坐标向右向下走到给定坐标的路线。给定马的坐标是一个无法通过的障碍,其周围有8个点无法通过。

思路:走到点(i,j)的路线数为a[i][j]=a[i-1][j]+a[i][j-1];想到这一点就差不多了。用数组a存路线数,数组b判断障碍。注意边界条件,a[i][j]即为总路线数。

代码如下:

#include
using namespace std;
long long a[16][16],b[5],n;
void getrabbit(long long  a[16][16],long long b[5])
{int i,t=1,j,y,m,x;
for (i=0;i<16;i++)
for (j=0;j<16;j++) {  a[i][j]=-1;}
a[b[2]][b[3]]=0;
if (b[2]-1>=0&&b[3]-2>=0) a[b[2]-1][b[3]-2]=0;
if (b[2]-2>=0&&b[3]+1<=b[1]) a[b[2]-2][b[3]+1]=0;
if (b[2]-2>=0&&b[3]-1>=0) a[b[2]-2][b[3]-1]=0;
if (b[2]-1>=0&&b[3]+2<=b[1]) a[b[2]-1][b[3]+2]=0;
if (b[2]+1<=b[0]&&b[3]-2>=0) a[b[2]+1][b[3]-2]=0;
if (b[2]+2<=b[0]&&b[3]-1>=0) a[b[2]+2][b[3]-1]=0;
if (b[2]+1<=b[0]&&b[3]+2<=b[1]) a[b[2]+1][b[3]+2]=0;
if (b[2]+2<=b[0]&&b[3]+1<=b[0]) a[b[2]+2][b[3]+1]=0;
a[0][0]=1;
for (i=0;i<=b[0];i++)
for (j=0;j<=b[1];j++)
{if (i==0&&j==0) continue;
else {if (a[i][j]==0) continue;
if (i==0) a[i][j]=a[i][j-1];
else if (j==0) a[i][j]=a[i-1][j];
else a[i][j]=a[i-1][j]+a[i][j-1];
}
}
}
int main()
{
long long n,x,j,i;
while (cin>>b[0]>>b[1]>>b[2]>>b[3])
{ getrabbit(a,b);
cout<



你可能感兴趣的:(递推递归,动态规划)