剑指 Offer 12. 矩阵中的路径

public static int[][] direction = new int[][]{{0,-1},{0,1},{1,0},{-1,0}};
    public boolean exist(char[][] board, String word) {
        //dfs
        int m = board.length;
        int n = board[0].length;
        boolean[][] flag = new boolean[m][n];
        for(int i = 0 ; i < m ; i++)
        {
            for(int j = 0 ; j < n ; j++)
            {
                if(dfs(board,i,j,flag,word,0))
                {
                    return true;
                }
               
            }
        }
        return false;
    }

    public boolean dfs(char[][] board,int i , int j ,boolean[][] flag , String word , int index)
    {
            if(index == word.length())
           {
               return true;
           }

           if( i >= board.length || i < 0 || j >= board[0].length || j < 0 || flag[i][j] || word.charAt(index) != board[i][j])
           {
               return false;
           }
           
           flag[i][j] = true;
          
             boolean cur =  dfs(board,i + direction[0][0],j+direction[0][1],flag,word,index+1)
               || dfs(board,i + direction[1][0],j+direction[1][1],flag,word,index+1)
               ||  dfs(board,i + direction[2][0],j+direction[2][1],flag,word,index+1)
               || dfs(board,i + direction[3][0],j+direction[3][1],flag,word,index+1);
               
           flag[i][j] = false;

           return cur;

    }
原文地址:https://www.cnblogs.com/swqblog/p/13283306.html