原题数据本来是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; } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)