递推递归练习 中的L题
2017-04-01 19:35
190 查看
题意就是求点从(0,0)坐标向右向下走到给定坐标的路线。给定马的坐标是一个无法通过的障碍,其周围有8个点无法通过。
思路:走到点(i,j)的路线数为a[i][j]=a[i-1][j]+a[i][j-1];想到这一点就差不多了。用数组a存路线数,数组b判断障碍。注意边界条件,a[i][j]即为总路线数。
代码如下:
#include<iostream>
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<<a[b[0]][b[1]]<<endl;}
}
思路:走到点(i,j)的路线数为a[i][j]=a[i-1][j]+a[i][j-1];想到这一点就差不多了。用数组a存路线数,数组b判断障碍。注意边界条件,a[i][j]即为总路线数。
代码如下:
#include<iostream>
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<<a[b[0]][b[1]]<<endl;}
}
相关文章推荐
- ACM-递归递推练习N-青蛙过河
- 递归递推练习 M
- 递推递归练习 P - M--二分查找
- 递推递归练习P - M--二分查找
- ACM-递推递归练习A-母牛的故事
- 递推递归练习L - 马拦过河卒
- 递推递归练习 P - M--二分查找
- 递推递归练习G - Fighting_小银考呀考不过四级
- 递推递归练习 J题
- 递推递归练习H
- 递推递归练习--D(汉诺塔问题)
- 递推递归练习C递归的函数
- 递推递归练习--F(计算组合数)
- 递归递推练习 D
- 递推递归练习 O
- 递推递归练习 O - 螺旋方阵
- 递推递归练习--总结
- 递推递归练习 M - 数值分解
- 递推递归练习M - 数值分解
- 递推递归练习N - 青蛙过河