package algorithms; import java.util.Arrays; public class Exp3_2 { private int pathLength; private int rows; private int cols; private boolean[][] visited; char[] wordArray; public boolean exist(char[][] board, String word) { if (board == null) return false; rows = board.length; cols = board[0].length; // 记录该元素是否已经被访问过了 visited = new boolean[rows][cols]; for(int i=0;i<rows;i++) Arrays.fill(visited[i], false); wordArray = word.toCharArray(); pathLength = 0; for (int i = 0; i < rows; i++) for (int j = 0; j < cols; j++) { if (findPath(board, i, j)) { return true; } } return false; } private boolean findPath(char[][] board, int i, int j) { boolean flag = false; if (pathLength == wordArray.length) return true; if (i >= 0 && i < rows && j >= 0 && j < cols && board[i][j] == wordArray[pathLength] && visited[i][j] == false) { pathLength++; visited[i][j] = true; flag = findPath(board, i+1, j) || findPath(board, i-1, j) || findPath(board, i, j+1) || findPath(board, i, j-1); if (!flag) { pathLength--; visited[i][j] = false; } } return flag; } public static void main(String[] args) { char[][] board= {{'a','b','c','e'},{'s','f','c','s'},{'a','d','e','e'}}; String word = "abcced"; boolean b = new Exp3_2().exist(board, word); System.out.println(b); } }