蒟蒻求救
查看原帖
蒟蒻求救
339299
osfly楼主2020/5/21 21:11

下面的代码输出总是为0,不知道错哪里

#include<cstdio>
int n,m,hx,hy;										//n:B点x坐标 m:B点y坐标 hx:马的x坐标 hy:马的y坐标 
int h[2][9];										//马的控制点的位置 
int map[21][21];									//定义地图(标数法) 
bool cango[21][21]; 								//定义地图哪一些位置可以走 
void init()											//初始化 
{
	for(int i=0;i<=n;i++)							//将所有位置标记true和0 
		for(int j=0;j<=m;j++)
		{
			cango[i][j]=true;
			map[i][j]=0;
		}
	cango[hx][hy]=false;							//马的位置标记false 
	for(int i=0;i<=n;i++) map[i][0]=1;				//(标数法)上边标1 
	for(int j=0;j<=m;j++) map[0][j]=1;				//(标数法)左边标1 
	for(int k=1;k<=8;k++)							//马的控制点初始化 
	{
		h[1][k]=-1;
		h[2][k]=-1;
	}
}
void calculate()									//计算马的控制点 
{
	int x,y;
	//P1
	x=hx+2;
	y=hy+1;
	if(!(x>n||x<0||y>m||y<0))
	{
		cango[x][y]=false;
		h[1][1]=x;
		h[1][2]=y; 
	} 
	//P2
	x=hx+1;
	y=hy+2;
	if(!(x>n||x<0||y>m||y<0))
	{
		cango[x][y]=false;
		h[2][1]=x;
		h[2][2]=y; 
	} 
	//P3
	x=hx-1;
	y=hy+2;
	if(!(x>n||x<0||y>m||y<0))
	{
		cango[x][y]=false;
		h[3][1]=x;
		h[3][2]=y; 
	} 
	//P4
	x=hx-2;
	y=hy+1;
	if(!(x>n||x<0||y>m||y<0))
	{
		cango[x][y]=false;
		h[4][1]=x;
		h[4][2]=y; 
	} 
	//P5
	x=hx-2;
	y=hy-1;
	if(!(x>n||x<0||y>m||y<0))
	{
		cango[x][y]=false;
		h[5][1]=x;
		h[5][2]=y; 
	} 
	//P6
	x=hx-1;
	y=hy-2;
	if(!(x>n||x<0||y>m||y<0))
	{
		cango[x][y]=false;
		h[6][1]=x;
		h[6][2]=y; 
	} 
	//P7
	x=hx+1;
	y=hy-2;
	if(!(x>n||x<0||y>m||y<0))
	{
		cango[x][y]=false;
		h[7][1]=x;
		h[7][2]=y; 
	} 
	//P8
	x=hx+2;
	y=hy-1;
	if(!(x>n||x<0||y>m||y<0))
	{
		cango[x][y]=false;
		h[8][1]=x;
		h[8][2]=y; 
	} 
}
void sign()											//标记 
{
	for(int k=1;k<=8;k++) map[h[1][k]][h[2][k]]=0;	//(标记法)将马的控制点设置为0 
	for(int i=1;i<=n;i++)							//开始标记 
		for(int j=1;j<=m;j++)
			if(map[i][j]!=0)  map[i][j]=map[i-1][j]+map[i][j-1];
}
int main()
{
	scanf("%d %d %d %d",&n,&m,&hx,&hy);				//输入 
	init();											//初始化 
	calculate();									//计算马的控制点 
	sign();
	printf("%d",map[n][m]);
	return 0;
}
2020/5/21 21:11
加载中...