import java.util.*;
public class Solution {
public boolean hasPath (char[][] matrix, String word) {
if (matrix == null || matrix.length == 0 || matrix[0].length == 0)
return false;
if (word == null || word.length() == 0)
return false;
int m = matrix.length, n = matrix[0].length;
char[] wc = word.toCharArray();
int[][] mark = new int[m][n];
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
if (has(i, j, matrix, mark, wc, 0)) {
return true;
}
}
}
return false;
}
public boolean has(int i, int j, char[][] matrix, int[][] mark,
char[] word, int index) {
if (index == word.length)
return true;
if (i >= matrix.length || i < 0 || j >= matrix[0].length || j < 0)
return false;
boolean hasPath = false;
if (mark[i][j] == 0 && matrix[i][j] == word[index]) {
mark[i][j] = 1;
hasPath = has(i + 1, j, matrix, mark, word, index + 1)
|| has(i - 1, j, matrix, mark, word, index + 1)
|| has(i, j + 1, matrix, mark, word, index + 1)
|| has(i, j - 1, matrix, mark, word, index + 1);
}
if (!hasPath) { // 关键,如果没有匹配上,要去除mark数组的占位
mark[i][j] = 0;
}
return hasPath;
}
}