package leetcode;
public class offer_12 {
//设置全局变量
int flag=0;
public boolean exist(char[][] board, String word) {
if(board==null) {return false;}
int height=board.length;
int width=board[0].length;
//设置一个访问数据,防止重复寻找
int[][] visited=new int[height][width];
for(int i=0;i<height;i++) {
for(int j=0;j<width;j++) {
backtrack(board,i,j,word,0,visited);
if(flag==1) {return true;}
}
}
return false;
}
public void backtrack(char[][] board,int i,int j,String word,int length,int[][] visited) {
if(visited[i][j]==0) {
if(board[i][j]==word.charAt(length)) {
length=length+1;
visited[i][j]=1;
//如果找到全部对应的word就返回
if(length==word.length()) {
flag=1;
return;
}
//向上找
if(flag==0&&i>0) {
backtrack(board, i-1, j, word, length,visited);
}
//向下找
if(flag==0&&i<board.length-1) {
backtrack(board, i+1, j, word, length,visited);
}
//想左找
if(flag==0&&j>0) {
backtrack(board, i, j-1, word, length,visited);
}
//向右找
if(flag==0&&j<board[0].length-1) {
backtrack(board, i, j+1, word, length,visited);
}
visited[i][j]=0;
}
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
offer_12 off=new offer_12();
char[][] board= {
{'A','B','C','E'},
{'S','F','C','S'},
{'A','D','E','E'}
};
System.out.println(off.exist(board, "ABCCED"));
}
}