矩阵中的路径DFS

矩阵中的路径

http://www.nowcoder.com/questionTerminal/c61c6999eecb4b8f88a98f66b273a3cc

class Solution {
    public boolean hasPath(char[] matrix, int rows, int cols, char[] str){
        char[][] mat = new char[rows][cols];
        for(int i = 0, k = 0; i < rows; ++i){//把矩阵二维存储
            for(int j = 0; j < cols; ++j){
                mat[i][j] = matrix[k++];
            }
        }
        String s = new String(str);//方便调用substring函数
        for(int i = 0; i < rows; ++i){
            for(int j = 0; j < cols; ++j){
                boolean[][] visit = new boolean[rows][cols];//标记是否重复访问
                if(f(mat, i, j, s, visit)) return true;//该点为起点能否形成路径
            }
        }
        return false;
    }
    public static boolean f(char[][] mat, int i, int j, String s, boolean[][] visit){
        if(mat[i][j] != s.charAt(0)) return false;
        else if(s.length() == 1) return true;//最后一个字符被匹配上了
        visit[i][j] = true;//标记该点已访问
        boolean r = false;
        if(g(i + 1, j, mat) && !visit[i + 1][j]) r = r||f(mat, i + 1, j, s.substring(1), visit);
        if(g(i - 1, j, mat) && !visit[i - 1][j]) r = r||f(mat, i - 1, j, s.substring(1), visit);
        if(g(i, j + 1, mat) && !visit[i][j + 1]) r = r||f(mat, i, j + 1, s.substring(1), visit);
        if(g(i, j - 1, mat) && !visit[i][j - 1]) r = r||f(mat, i, j - 1, s.substring(1), visit);
        visit[i][j] = false;//重置该点的访问权
        return r;
    }
    public static boolean g(int i, int j, char[][] mat){//该点下标是否越界
        if(i >= 0 && j >= 0 && i < mat.length && j < mat[0].length) return true;
        return false;
    }
}
全部评论
请问为什么要重置访问权
点赞 回复 分享
发布于 2020-08-27 10:20

相关推荐

01-29 15:45
已编辑
华中科技大学 前端工程师
COLORSN:可以试一下,小厂看技术栈是不是很落后,如果太拉胯就别去,个人认为有实习氛围比你自己琢磨要高效不少,然后就是小厂其实也有可能会问的很难,这都比较难说,还是看自己项目含金量够不够,寒假还能不能推进学习再选择,毕竟去实习过年就10天假了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务