/**
* 矩陣中的路徑
* 請設計一個函數,用來判斷在一個矩陣中是否存在一條包含某字符串所有的路徑,路徑可以從矩陣中的任意一格移動,每一步可以在矩陣中向左,右,上,下移動.
* 如果一條路徑經過了矩陣的某一個,那麼該路徑不能再次進入。
*
* @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;
}
劍指Offer學習-面試題12:矩陣中的路徑
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.