8月24日:京东算法岗笔试第二题迷宫问题
参加京东笔试被两道题当时一道都没做出来。 经过几天的思考,将第二题本地运行没有问题。请大家指导指导思路是否有问题。 本地运行是没有问题的。谢谢🙏! 目前0 offer的一枚菜鸡。 package JD_2019; import java.util.ArrayList; import java.util.Scanner; /** * 大致思路:将四个小迷宫块拼接成一个大的迷宫块, * 之后任意一个起始点开始向他的周围开始移动,如果存在一个开始点能够到达其他开始点的路径,则返回true。 * 不存在一条路径,则返回false。 * */ public class Main_2 { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int T = Integer.parseInt(sc.nextLine()); for(int i = 0; i<T;i++){ String[] nums = sc.nextLine().split(" "); int n = Integer.parseInt(nums[0]); int m = Integer.parseInt(nums[1]); char[][] matrix = new char[2*n][2*m]; for(int j=0;j<n;j++){ String s = sc.nextLine(); for (int k=0;k<s.length();k++){ matrix[j][k] = s.charAt(k); matrix[j+n][k] = s.charAt(k); matrix[j][k+m] = s.charAt(k); matrix[j+n][k+m] = s.charAt(k); } } //存储四个开始点。 ArrayList<ArrayList<Integer>> sIndex= new ArrayList<>(); for(int j = 0;j<2*n;j++){ for (int k = 0;k<2*m;k++){ if(matrix[j][k] =='S'){ ArrayList<Integer> index = new ArrayList<>(); index.add(j); index.add(k); sIndex.add(index); } } } Main_2 func= new Main_2(); for (int k=1;k<sIndex.size();k++){ func.dfs(matrix, sIndex.get(0).get(0), sIndex.get(0).get(1),sIndex.get(k).get(0),sIndex.get(k).get(1)); if (flag ==true){ break; } } System.out.println(flag); } } static boolean flag = false; //搜索路径 public void dfs(char[][] matrix, int x0, int y0, int x1, int y1){ if(check(matrix, x0, y0) == false) return; if(x0 == x1 && y0== y1){ flag = true; return; } matrix[x0][y0] = '#'; dfs(matrix, x0+1, y0,x1, y1); dfs(matrix, x0-1, y0,x1, y1); dfs(matrix, x0, y0+1,x1, y1); dfs(matrix, x0, y0-1,x1, y1); matrix[x0][y0] = '.'; } //判断点是否满足条件。 static boolean check(char[][] martrix, int x,int y ){ int n = martrix.length, m = martrix[0].length; return 0<=x && x<n && y>=0 && y<m && martrix[x][y] != '#'; } }
#京东##笔试题目#