-
Notifications
You must be signed in to change notification settings - Fork 1
/
Offer12.java
37 lines (35 loc) · 1.31 KB
/
Offer12.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package lcof;
/**
* Offer12. 矩阵中的路径
* 回溯法
* @author LBW
*/
public class Offer12 {
public boolean exist(char[][] board, String word) {
int m = board.length, n = board[0].length;
boolean[][] isVisited = new boolean[m][n];
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (traverse(board, isVisited, i, j, word, 0))
return true;
// // set isVisited to false
// for (int k = 0; k < m; k++) {
// Arrays.fill(isVisited[k], false);
// }
}
}
return false;
}
private boolean traverse(char[][] board, boolean[][] isVisited, int i, int j, String word, int idx) {
if (idx == word.length()) {
return true;
}
if (i < 0 || i >= board.length || j < 0 || j >= board[0].length || isVisited[i][j] || board[i][j] != word.charAt(idx)) {
return false;
}
isVisited[i][j] = true;
boolean res = traverse(board, isVisited, i - 1, j, word, idx + 1) || traverse(board, isVisited, i + 1, j, word, idx + 1) || traverse(board, isVisited, i, j - 1, word, idx + 1) || traverse(board, isVisited, i, j + 1, word, idx + 1);
isVisited[i][j] = false;
return res;
}
}