永不停止的哭声.P1002
  • 板块学术版
  • 楼主uFTvL9
  • 当前回复12
  • 已保存回复12
  • 发布时间2021/5/28 10:05
  • 上次更新2023/11/4 22:37:38
查看原帖
永不停止的哭声.P1002
411963
uFTvL9楼主2021/5/28 10:05

本人在百度上搜索了相关的题解,但一直改不对。我不是很理解代码。 有哪位大佬可以帮我看一看面对这道著名的题目,我的代码哪里出错了吗? 在下感激不尽。下面是代码

#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;
}
2021/5/28 10:05
加载中...