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"));
    }
}