publicbooleanexist(char[][] board, String word){ char[] words = word.toCharArray();
m = board.length; n = board[0].length;
boolean[][] ticks = newboolean[m][n];
for (int i = 0; i < m; i++) { for (int j = 0; j < n; j++) { if (board[i][j] == words[0]) { ticks[i][j] = true; if (dfs(board, words, 1, i, j, ticks)) { returntrue; } ticks[i][j] = false; } } }
returnfalse; }
/** * DFS */ publicbooleandfs(char[][] board, char[] words, int now, int i, int j, boolean[][] ticks){ // 已经匹配完成 if (now == words.length) { returntrue; }
boolean result = false;
for (int k = 0; k < 4; k++) { i += turnX[k]; j += turnY[k];
// 不符合要求排除 if (!judge(i, j) && !ticks[i][j] && board[i][j] == words[now]) { ticks[i][j] = true; result |= dfs(board, words, now + 1, i, j, ticks); ticks[i][j] = false; }
i -= turnX[k]; j -= turnY[k]; }
return result; }
/** * 判断下标是否越界 */ publicbooleanjudge(int i, int j){ return i < 0 || j < 0 || (i - m) * (j - n) <= 0; } }