剑指offer12 矩阵中的路径 Java

public class FindPath12_ {
    public static void main(String[] args) {
        char[][] arr = {{'a', 'b', 't', 'g'},
                        {'c', 'f', 'c', 's'},
                        {'j', 'd', 'e', 'h'}};
        char[] str = {'b', 'f', 'c', 'e'};
        System.out.println(hasPath(arr,str));
    }


    private static boolean hasPath(char[][] arr, char[] str) {
        boolean[][] visited = new boolean[arr.length][arr[0].length];
        int pathLen = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[0].length; j++) {
                if (findPath(arr, arr.length, arr[0].length, i, j, visited, pathLen, str)) {
                    return true;
                }
            }
        }
        return false;
    }
    private static boolean findPath(char[][] arr, int rows, int cols, int i, int j, boolean[][] visited, int pathLen, char[] str) {
        if (pathLen == str.length)
            return true;
        boolean hasPath = false;
        if (i >= 0 && i < rows && j >= 0 && j < cols && arr[i][j]==str[pathLen] && !visited[i][j]) {
            pathLen ++;
            visited[i][j] = true;
            hasPath =  findPath(arr, rows, cols, i + 1, j, visited, pathLen, str)
                    || findPath(arr, rows, cols, i - 1, j, visited, pathLen, str)
                    || findPath(arr, rows, cols, i, j + 1, visited, pathLen, str)
                    || findPath(arr, rows, cols, i, j - 1, visited, pathLen, str);
            if (!hasPath) {
                pathLen --;
                visited[i][j] = false;
            }
        }
        return hasPath;
    }


}

猜你喜欢

转载自blog.csdn.net/weixin_43065507/article/details/99329840
今日推荐