我自己使用的是小奥的标数法。
自己测试了几个数据,都是对的。
麻烦各位大佬帮我康康![拜托][拜托][拜托]
#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;
}
}
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;
}
}
}
希望各位大佬帮帮我!!!