分析:
首先将整个棋盘g初始化为全.
再从初始位置开始深度优先遍历dfs(当前x,当前y,已走步数):
(1)先判断当前的x和y下标是否越界;
(2)再判断当前已走的步数是否为3;
(3)然后将当前位置设置为#,即g[x][y]='#'
(4)最后递归访问8个位置
代码:
import java.util.Scanner;
public class Main {
/*
* 思路:
测试数据
4
1 2
1 3
2 4
正常输出:
3 1 0 0
* */
static int n;//棋盘的行列
static int m;
static int x1;//初始位置
static int y1;
static char[][] g;//棋盘
static int[][] t= {{-2,1},{-2,-1},{2,1},{2,-1},{1,2},{-1,2},{1,-2},{-1,-2}};//8种可能
public static void main(String[] args){
//1.输出相关值
Scanner sc = new Scanner(System.in);
n = sc.nextInt();
m = sc.nextInt();
x1 = sc.nextInt();
y1 = sc.nextInt();
g = new char[n][m];
//2.初始化棋盘
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
g[i][j] = '.';
}
}
//3.递归遍历棋盘
dfs(x1-1,y1-1,0);//下标从1开始
//4.输出结果
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
System.out.print(g[i][j]);
}
System.out.println();
}
}
/*
* x、y:当前开始位置
* step:当前已走步数
* */
private static void dfs(int x, int y, int step) {
//1.已走3步,返回
if(step>3) {
return;
}
//2.越界返回
if(x<0 || x>=g.length || y<0 || y>=g[0].length) {
return;
}
//3.继续向下走
g[x][y]='#';
for(int i=0;i<8;i++) {
dfs(x+t[i][0],y+t[i][1],step+1);
}
}
}