本人在百度上搜索了相关的题解,但一直改不对。我不是很理解代码。 有哪位大佬可以帮我看一看面对这道著名的题目,我的代码哪里出错了吗? 在下感激不尽。下面是代码
#include<bits/stdc++.h>
#define h hourse
using namespace std;
int main()
{
int B1,B2,h1,h2;
cin>>B1>>B2>>h1>>h2;
bool map[B1+1][B2+1];
for(int i=0;i<B1+1;i++)
for(int j=0;j<B2+1;j++)
map[i][j]=true;
map[h1][h2]=false;
//up
if(h1-2>=0 and h2-1>=0) map[h1-2][h2-1]=false;
if(h1-2>=0 and h2+1<=B1) map[h1-2][h2+1]=false;
//left
if(h1-1>=0 and h2-2>=0) map[h1-1][h2-2]=false;
if(h1+1>=0 and h2-2>=0) map[h1+1][h2-2]=false;
//right
if(h1-1>=0 and h2+2<=B1) map[h1-1][h2+2]=false;
if(h1+1<=B2 and h2+2<=B1) map[h1+1][h2+2]=false;
//down
if(h1+2<=B2 and h2-1>=0) map[h1+2][h2-1]=false;
if(h1+2<=B2 and h2+1<=B2) map[h1+2][h2+1]=false;
int f[B1+1][B2+1];
for(int i=0;i<B1+1;i++)
for(int j=0;j<B2+1;j++)
f[i][j]=1;
for(int i=0;i<=B1+1;i++)
for(int j=0;j<=B2+1;j++)
{
if(map[i][j]==false)
f[i][j]=0;
if(f[i][j])
{
if(i==0 and j==0)
continue;
else if(i==0)
f[i][j]=f[i][j-1];
else if(j==0)
f[i][j]=f[i-1][j];
else
f[i][j]=f[i-1][j]+f[i][j-1];
}
}
printf("%d\n",f[B1][B2]);
return 0;
}