The universe said you are st|

Momo·Trace

园龄:3年3个月粉丝:6关注:1

马的遍历

在n*m(n表示行,m表示列)的棋盘上,马起始位置为x,y(注意:左上角第一个位置为1,1),问:马有多少种走的方法,将棋盘所有的位置全部走一遍,并且每个位置经过且仅经过一次。马跳“日”字。

输入

第一行:n,m(中间空格隔开)(n,m<7)
第二行:x,y(中间空格隔开)

输出

可能的方法数

样例输入

5 4
1 1

样例输出

32



代码:

#include <bits/stdc++.h>
using namespace std;
int n,m,ans;
char a[10][10];
int fx[9]={0,-2,-2,-1,1,2,2,1,-1},fy[9]={0,-1,1,2,2,1,-1,-2,-2};
void dfs(int x,int y,int k)
{
if(k==n*m)
{
ans++;
return;
}
for(int i=1;i<=8;i++)
{
int xx=x+fx[i];
int yy=y+fy[i];
if(!a[xx][yy]&&xx>=1&&xx<=n&&yy>=1&&yy<=m)
{
a[xx][yy]=1;
dfs(xx,yy,k+1);
a[xx][yy]=0;
}
}
}
int main()
{
cin >> n >> m;
int aa,bb;
cin >> aa >> bb;
a[aa][bb]=1;
dfs(aa,bb,1);
cout << ans;
return 0;
}
posted @   Momo·Trace  阅读(53)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起