求助大佬(急)!!!#1#3#4
查看原帖
求助大佬(急)!!!#1#3#4
1287878
Ruoyuzhou楼主2024/2/25 14:22

P1002

我此题使用的是小奥的标数法。

我也自己测试了几组数据,都没有问题。

希望各位大佬能帮帮我!!![殷切的目光]

#include <bits/stdc++.h>
using namespace std;
int n(int x,int y,int x_,int y_);
int main()
{
	int x1,y1,x2,y2;//(x1,y1)为棋盘,(x2,y2)为马。
	scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
	int m[x1+1][y1+1];//构建棋盘
	for(int i=0;i<=y1;i++)
	{
		m[0][i]=1;
		if(n(i,0,x2,y2))
		{
			for(int j=i;j<=y1;j++) m[0][j]=0;
			break;
		}
	}
	for(int i=0;i<=x1;i++)
	{
		m[i][0]=1;
		if(n(i,0,x2,y2))
		{
			for(int j=i;j<=x1;j++) m[j][0]=0;
			break;
		}
	}//将第一行和第一列赋值为"1"
	for(int i=1;i<=y1;i++)
	{
		for(int j=1;j<=x1;j++)
		{
			m[j][i]=m[j][i-1]+m[j-1][i];//标数法
			if(n(j,i,x2,y2)) m[j][i]=0;//若为马及其能到的地方方法数为"0"
		}
	}
	cout<<m[x1][y1];//输出终点方法数
	return 0;
}
int n(int x,int y,int x_,int y_)
{
	if(x==x_ &&y==y_) return 1;
	else
	{
		if(x==x_ ||y==y_) return 0;
		else
		{
			if((abs(x-x_)+abs(y-y_))==3) return 1;
			else return 0;
		}
	}
}

(拜托!

2024/2/25 14:22
加载中...