publicclassTest{publicstaticvoidmain(String[] args){Solution solution =newSolution();System.out.println(solution.exist(newchar[][]{{'A','B','C','E'},{'S','F','E','S'},{'A','D','E','E'}},"ABCESEEEFS"));}}classSolution{privateint row;privateint col;privateboolean[][] flag;publicbooleanexist(char[][] board,String word){
row = board.length;
col = board[0].length;
flag =newboolean[row][col];for(int i =0; i < row; i++){for(int j =0; j < col; j++){if(board[i][j]== word.charAt(0)){if(dfs(board, word, i, j,0)){returntrue;}else{
flag[i][j]=false;}}}}returnfalse;}privatebooleandfs(char[][] board,String word,int i,int j,int index){
flag[i][j]=true;if(index == word.length()-1){returntrue;}if(i -1>=0&&!flag[i -1][j]&& board[i -1][j]== word.charAt(index +1)){if(dfs(board, word, i -1, j, index +1)){returntrue;}else{
flag[i -1][j]=false;}}if(i +1< row &&!flag[i +1][j]&& board[i +1][j]== word.charAt(index +1)){if(dfs(board, word, i +1, j, index +1)){returntrue;}else{
flag[i +1][j]=false;}}if(j -1>=0&&!flag[i][j -1]&& board[i][j -1]== word.charAt(index +1)){if(dfs(board, word, i, j -1, index +1)){returntrue;}else{
flag[i][j -1]=false;}}if(j +1< col &&!flag[i][j +1]&& board[i][j +1]== word.charAt(index +1)){if(dfs(board, word, i, j +1, index +1)){returntrue;}else{
flag[i][j +1]=false;}}returnfalse;}}classSolution1{privateint row;privateint col;publicbooleanexist(char[][] board,String word){
row = board.length;
col = board[0].length;for(int i =0; i < row; i++){for(int j =0; j < col; j++){if(board[i][j]== word.charAt(0)){if(dfs(board, word, i, j,0)){returntrue;}}}}returnfalse;}privatebooleandfs(char[][] board,String word,int i,int j,int index){if(i <0|| i >= row || j <0|| j >= col || board[i][j]!= word.charAt(index)){returnfalse;}if(index == word.length()-1){returntrue;}
board[i][j]='\0';boolean res =dfs(board, word, i -1, j, index +1)||dfs(board, word, i +1, j, index +1)||dfs(board, word, i, j -1, index +1)||dfs(board, word, i, j +1, index +1);
board[i][j]= word.charAt(index);return res;}}