在 5X5 的棋盘上,给定一位置,输出马回到原点有多少种不同的方案。
注意:马走的每一步必须在棋盘上,走斜日
注意:棋盘的左上角坐标为 (1,1)。
输入
给定一位置:x y,中间有一空格隔开。
输出
输出可以回到原点的方案总数。
本蒟蒻采用深搜,目前未发现错误
#include<bits/stdc++.h>
using namespace std;
int n,m,total,bz,mp[6][6];
void dfs(int,int);
int main()
{
cin>>n>>m;
dfs(n,m);
cout<<total;
}
void dfs(int x,int y)
{
if(x==n and y==m and bz==1)
{
total++;
return;
}
if(x==n and y==m and bz==0)
{
bz=1;
}
if(x>=3 and y>=2 and !mp[x-2][y-1])
{
mp[x-2][y-1]=1;
dfs(x-2,y-1);
mp[x-2][y-1]=0;
}
if(x>=3 and y<=4 and !mp[x-2][y+1])
{
mp[x-2][y+1]=1;
dfs(x-2,y+1);
mp[x-2][y+1]=0;
}
if(x>=2 and y>=3 and !mp[x-1][y-2])
{
mp[x-1][y-2]=1;
dfs(x-1,y-2);
mp[x-1][y-2]=0;
}
if(x>=2 and y<=3 and !mp[x-1][y+2])
{
mp[x-1][y+2]=1;
dfs(x-1,y+2);
mp[x-1][y+2]=0;
}
if(x<=4 and y>=3 and !mp[x+1][y-2])
{
mp[x+1][y-2]=1;
dfs(x+1,y-2);
mp[x+1][y-2]=0;
}
if(x<=4 and y<=3 and !mp[x+1][y+2])
{
mp[x+1][y+2]=1;
dfs(x+1,y+2);
mp[x+1][y+2]=0;
}
if(x<=3 and y>=2 and !mp[x+2][y-1])
{
mp[x+2][y-1]=1;
dfs(x+2,y-1);
mp[x+2][y-1]=0;
}
if(x<=3 and y<=2 and !mp[x+2][y+1])
{
mp[x+2][y+1]=1;
dfs(x+2,y+1);
mp[x+2][y+1]=0;
}
}
求各位神犇帮帮本蒟蒻