原题数据本来是char数组误写为String数组了,将就看吧。
注释的是输入输出功能。
public class Main {
public static void main(String[] args) {
// Scanner scan = new Scanner(System.in);
// int N = scan.nextInt();
// int M = scan.nextInt();
int N = 10;
int M = 10;
String[][] field = {
{"U", "D", "D", "L", "U", "U", "L", "R", "U", "L"},
{"U", "U", "R", "L", "L", "L", "R", "R", "R", "U"},
{"R", "R", "U", "U", "R", "L", "D", "L", "R", "D"},
{"R", "U", "D", "D", "D", "D", "U", "U", "U", "U"},
{"U", "R", "U", "D", "L", "L", "R", "R", "U", "U"},
{"D", "U", "R", "L", "R", "L", "D", "L", "R", "L"},
{"U", "L", "L", "U", "R", "L", "L", "R", "D", "U"},
{"R", "D", "L", "U", "L", "L", "R", "D", "D", "D"},
{"U", "U", "D", "D", "U", "D", "U", "D", "L", "L"},
{"U", "L", "R", "D", "L", "U", "U", "R", "R", "R"}
};
boolean [][] vis = new boolean[N][M];
int res = 0;
// for (int i = 0; i < N; i++) {
// for (int j = 0; j < M; j++) {
// field[i][j] = scan.next().charAt(0);
// }
// }
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
visReset(vis);
if(dfs(i,j,field,vis)){
res++;
}
}
}
System.out.println(res);
}
static void visReset(boolean[][] vis) {
for (int i = 0; i < vis.length; i++) {
for (int j = 0; j < vis[0].length; j++) {
vis[i][j] = false;
}
}
}
static boolean dfs(int x, int y, String [][]field , boolean[][] vis) {
if(x<0||x>field.length-1||y<0||y>field[0].length-1){
return true;
}
if(vis[x][y]){
return false;
}
vis[x][y] = true;
if(field[x][y].charAt(0) == 'L'){
return dfs(x,y-1,field,vis);
}
if(field[x][y].charAt(0) == 'R'){
return dfs(x,y+1,field,vis);
}
if(field[x][y].charAt(0) == 'U'){
return dfs(x-1,y,field,vis);
}
if(field[x][y].charAt(0) == 'D'){
return dfs(x+1,y,field,vis);
}
return false;
}
}
/* 输入用的测试数据
10 10
U D D L U U L R U L
U U R L L L R R R U
R R U U R L D L R D
R U D D D D U U U U
U R U D L L R R U U
D U R L R L D L R L
U L L U R L L R D U
R D L U L L R D D D
U U D D U D U D L L
U L R D L U U R R R
*/