classSolution{intROWS;intCOLS;publicbooleanexist(char[][] board,String word){ROWS= board.length;COLS= board[0].length;// 拜訪每一格for(int row =0; row <ROWS;++row){for(int col =0; col <COLS;++col){// 在每一格嘗試DFSif(backtrack(row, col,0, board, word)){returntrue;}}}returnfalse;}privatebooleanbacktrack(int r,int c,int i,char[][] board,String word){// 匹配成功if(i >= word.length())returntrue;// Check boundary and characterif(r <0|| r >=ROWS|| c <0|| c >=COLS|| word.charAt(i)!= board[r][c])returnfalse;boolean exist =false;if(board[r][c]== word.charAt(i)){// Mark as visited
board[r][c]+=100;// Check all the directions
exist =backtrack(r +1, c, i +1, board, word)||backtrack(r -1, c, i +1, board, word)||backtrack(r, c +1, i +1, board, word)||backtrack(r, c -1, i +1, board, word);// Mark as unvisited
board[r][c]-=100;}return exist;}}