DFS矩阵的路径

北城以北 提交于 2020-08-14 09:37:01

题目描述
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。

思路:

同“机器人的运动范围”类似,同样是使用DFS的路径问题,但比上题更难的地方在于起始点不是(0,0)而是任何地方都可以,主要是要在主函数中把这个表示出来,而递归函数的写法和上题套路一样,也是边界条件->题目满足条件->标记->回溯

核心代码:
主函数中循环的起始点:

   for(int i = 0; i < rows; i++)
        for(int j = 0; j < cols; j++)
        if(subHasPath(matrix,rows,cols,str,i,j,0))  //每次都是从str的起始位置开始匹配
              return true;

递归函数:

public boolean subHasPath(char[] matrix, int rows, int cols, char[] str, int row, int col, int len){
        if(row < 0 || col < 0 || row >= rows || col >= cols ||matrix[row*cols+col] != str[len]|| visited[row*cols+col] == true) return false;
        if(len == str.length-1) return true;
        visited[row*cols+col] = true;
        if( subHasPath(matrix,rows,cols,str,row-1,col,len+1)||
          subHasPath(matrix,rows,cols,str,row+1,col,len+1)||
          subHasPath(matrix,rows,cols,str,row,col-1,len+1)||
          subHasPath(matrix,rows,cols,str,row,col+1,len+1)) return true;
        visited[row*cols+col] = false;
        return false;
    }
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!