题目:
代码如下:
#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所走到的位置都赋值‘#’,否则返回。最后打印一下就可以了。