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 38 39 40 41
| boolean finished = false;
public boolean exist(char[][] board, String word) { for (int i = 0; i < board.length; i++) { for (int j = 0; j < board[0].length; j++) { if (board[i][j] == word.charAt(0) && dfs(board, word, i, j, 0)) { return true; } } } return false; }
private boolean dfs(char[][] board, String word, int i, int j, int curr) { if (curr == word.length()) { finished = true; return true; } if (i < 0 || i >= board.length || j < 0 || j >= board[0].length || board[i][j] != word.charAt(curr)) { return false; } if (!finished) { char c = board[i][j]; board[i][j] = '.'; boolean down = dfs(board, word, i + 1, j, curr + 1); boolean right = dfs(board, word, i, j + 1, curr + 1); boolean up = dfs(board, word, i - 1, j, curr + 1); boolean left = dfs(board, word, i, j - 1, curr + 1); board[i][j] = c; return down || right || up || left; } else { return true; } }
|