import java.util.*;publicclassMain2_1{publicstaticint dir[][]={{-1,0},{1,0},{0,-1},{0,1}};publicstaticbooleancanMoveToPrincess(char map[][],int x,int y){int n = map.length;int m = map[0].length;for(int i =0; i <4; i++){int newx = x + dir[i][0];int newy = y + dir[i][1];if(newx >=0&& newx < n && newy >=0&& newy < m &&(map[newx][newy]=='.'|| map[newx][newy]=='E')){if(map[newx][newy]=='E'){returntrue;}else{
map[newx][newy]='*';if(canMoveToPrincess(map, newx, newy)){returntrue;}
map[newx][newy]='.';}}}returnfalse;}publicstaticvoidmain(String[] args){
Scanner sc =newScanner(System.in);int T = sc.nextInt();while((T--)!=0){int n = sc.nextInt();int m = sc.nextInt();char map[][]=newchar[n][m];int x =-1;int y =-1;for(int i =0; i < n; i++){
String temp = sc.next();for(int j =0; j < m; j++){
map[i][j]= temp.charAt(j);// 输入字符数组if(map[i][j]=='S'){
x = i;
y = j;}}}boolean ans =canMoveToPrincess(map, x, y);if(ans){
System.out.println("YES");}else{
System.out.println("NO");}}}}
代码2:
import java.util.*;publicclassMain2_2{publicstaticvoiddfs(char map[][],int i,int j){if(i <0|| i >= map.length || j <0|| j >= map[0].length || map[i][j]=='#'|| map[i][j]=='*'){return;}
map[i][j]='*';dfs(map, i +1, j);dfs(map, i -1, j);dfs(map, i, j +1);dfs(map, i, j -1);}publicstaticvoidmain(String[] args){
Scanner sc =newScanner(System.in);int T = sc.nextInt();while((T--)!=0){int n = sc.nextInt();int m = sc.nextInt();char map[][]=newchar[n][m];int start_x =-1;int start_y =-1;int end_x =-1;int end_y =-1;for(int i =0; i < n; i++){
String temp = sc.next();for(int j =0; j < m; j++){
map[i][j]= temp.charAt(j);// 输入字符数组if(map[i][j]=='E'){
end_x = i;
end_y = j;}if(map[i][j]=='S'){
start_x = i;
start_y = j;}}}dfs(map, start_x, start_y);if(map[end_x][end_y]=='*'){
System.out.println("YES");}else{
System.out.println("NO");}}}}