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] != '#';
    }
}

#京东##笔试题目#
全部评论
建议你说思路,这一对代码看不下去啊🤣
点赞 回复
分享
发布于 2019-08-26 15:07

相关推荐

点赞 1 评论
分享
牛客网
牛客企业服务