1219 马走日 先赞

#include <bits/stdc++.h>

using namespace std;

int n, m, s; //ct用来存方法数。

bool  mmap[10][10];

int dir[8][2] = {{1, 2}, {1, -2}, {-1, 2}, {-1, -2}, {2, 1}, {2, -1}, {-2, 1}, {-2, -1}};

void dfs(int sy, int sx, int r) {//当前x,y坐标,还剩下几个点

if (r == 0) { //到达叶子端,说明完成了全部遍历。

s++;

return; //如果没有return 会再无休止的向下遍历。但这题其实不会,思考下为什么?

}

for (int i = 0; i < 8; i++) { //遍历8种走法

int y = sy + dir[i][1], x = sx + dir[i][0]; //定义走法坐标

if (y >= 0 && y < m && x >= 0 && x < n && mmap[y][x] == false) { //。

mmap[y][x]=    true       ;

dfs( y, x,r-1 );

mmap[y][x] =   false     ;

}

}

}

int main() {

    int t, x, y;

    cin >> t;

while (t--) {

cin >> n >> m >> x>>y; 

s = 0; //s需要是全局变量,但在新一轮数据前需要重新归零。

memset(mmap, 0, sizeof(mmap));

mmap[y][x] = true;

dfs(y, x, n*m-1  );

cout << s << endl;

}

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值