劍指Offer學習-面試題12:矩陣中的路徑

	/**
     * 矩陣中的路徑
     * 請設計一個函數,用來判斷在一個矩陣中是否存在一條包含某字符串所有的路徑,路徑可以從矩陣中的任意一格移動,每一步可以在矩陣中向左,右,上,下移動.
     * 如果一條路徑經過了矩陣的某一個,那麼該路徑不能再次進入。
     *
     * @param arr
     * @param s
     * @return
     */
    public boolean hasPath(char[][] arr, String s) {
        if (null == arr || s == null || 0 == arr.length || 0 == s.length()) return false;
        int x = arr.length;
        int y = arr[0].length;
        int index = 0;
        boolean[][] visited = new boolean[x][y];
        for (int i = 0; i < x; i++) {
            for (int j = 0; j < y; j++) {
                if (arr[i][j] == s.charAt(index)) {
                    if (dfs(arr, i, j, index, s, x, y, visited)) return true;
                }
            }

        }
        return false;
    }

    private boolean dfs(char[][] arr, int i, int j, int index, String s, int x, int y, boolean[][] visited) {
        if (i < 0 || i >= x || j < 0 || j >= y || index >= s.length()) return false;
        boolean flags = false;
        if ((!visited[i][j]) && arr[i][j] == s.charAt(index)) {
            visited[i][j] = !flags;
            if (index == s.length() - 1) return !flags;
            index++;
            flags = dfs(arr, i + 1, j, index, s, x, y, visited) ||
                    dfs(arr, i - 1, j, index, s, x, y, visited) ||
                    dfs(arr, i, j - 1, index, s, x, y, visited) ||
                    dfs(arr, i, j + 1, index, s, x, y, visited);
        }
        visited[i][j] = false;
        return flags;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章