是一种基于深度优先的试错算法,通常可以使用递归来解决。

递归函数包括以下三个部分

1、出口:定义在递归函数开始的地方。同时可以通过全局变量统计可行解的个数

2、递归函数处理过程:取决于问题

3、递归函数传参:用于探索解得可能性

通过约束进行剪枝

 

矩阵中的路径

class Solution {
    public boolean exist(char[][] board, String word) {
        int row = board.length;
        int col =board[0].length;
        if(row==0||col==0)
            return false;
        boolean[][] visited = new boolean[row][col];
        for(int i =0;i<row;i++)
        {
            for(int j=0;j<col;j++)
            {
                if(hasPathCore(board,i,row,j,col,visited,word,0))
                    return true;
            }
        }
        return false;
}
public boolean hasPathCore(char[][] board,int i,int row,int j ,int col,boolean[][]visited,String word,int pathCur)
{
    if(word.length()==pathCur)
        return true;
    
    boolean hasPath =false;
    if(i>=0&&i<row&&j>=0&&j<col&&
        board[i][j]==word.charAt(pathCur)
        &&!visited[i][j])
        {
            pathCur++;
            visited[i][j]=true;
            hasPath=hasPathCore(board,i-1,row,j,col,visited,word,pathCur)||
                    hasPathCore(board,i+1,row,j,col,visited,word,pathCur)||
                    hasPathCore(board,i,row,j-1,col,visited,word,pathCur)||
                    hasPathCore(board,i,row,j+1,col,visited,word,pathCur);
            if(!hasPath)
            {
                pathCur--;
                visited[i][j]=false;
            }
        }
        return hasPath;
}
}