马的覆盖点

题目:
在这里插入图片描述
在这里插入图片描述
代码如下:

#include<bits/stdc++.h>
using namespace std;
char a[105][105];
int n,m,x,y;
int direction[8][2] = {{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};
void dfs(int x,int y,int step)
{
	if(step > 3) return;
	else a[x][y] = '#';
	for(int i = 0;i < 8;i++){
		int dx = x + direction[i][0];
		int dy = y + direction[i][1];
		if(dx >= 1 && dx <= n && dy >= 1 && dy <= m){
			dfs(dx,dy,step + 1);
		}
	}
}
int main()
{
	cin >> n >> m >> x >> y;
	for(int i = 1;i <= n;i++)
		for(int j = 1;j <= m;j++)
			a[i][j] = '.';
	a[x][y] = '#';
	dfs(x,y,0);
	for(int i = 1;i <= n;i++){
		for(int j = 1;j <= m;j++) cout << a[i][j];
		cout << endl;
	}
	return 0;
}

一道简单的搜索题,知道初始位置,首先把初始位置赋值’#’,刚开始步数是0,然后开始从八个方向走,每次走了之后,走过的点不用判重,因为一个位置重复走也是ok的。当步数小于4所走到的位置都赋值‘#’,否则返回。最后打印一下就可以了。

猜你喜欢

转载自blog.csdn.net/qq_41998938/article/details/87633368