0
点赞
收藏
分享

微信扫一扫

【acwing】1116. 马走日*(DFS)

软件共享软件 2022-04-16 阅读 92
c++搜索dfs

穿越隧道

在这里插入图片描述

#include <bits/stdc++.h>
using namespace std;
const int N = 1e2 + 10;
int g[N][N];
int ans;
int t;
int n,m,x,y;
int dx[8] = {-2,-1,1,2,2,1,-1,-2};
int dy[8] = {1,2,2,1,-1,-2,-2,-1};
bool st[N][N];
void dfs(int u, int uu,int num){
	if(num == n * m){
		ans++;
		return ;
	}
	for(int i = 0; i < 8; i++){
		int a = u + dx[i], b = uu + dy[i];
		if(a >= 0 && a < n && b >= 0 && b < m && !st[a][b]){
			st[a][b] = true;
			dfs(a,b,num + 1);
			st[a][b] = false;
		}
	}
} 
int main(){
	cin >> t;
	while(t--){
//		int n,m,x,y;
		cin >> n >> m >> x >> y; 
		ans = 0;
		memset(st,0,sizeof(st));//每一次起点开始重新标记 
		st[x][y] = 1;
		dfs(x,y,1);//起点:意味着占领了一个格子 
		cout << ans << endl;
	}
	
	return 0;
}
举报

相关推荐

0 条评论