剑指 Offer 12. 矩阵中的路径

  • 题目描述

  • 是一道很常见的深搜题目,不过里面要考虑一些边界问题,比如走过的路径是不能再次走入的,所以我这里我自己的
    代码想到是利用一个新的二维的数组,记录走过的路径,不过题解的直接将原二维数组中的路径隐藏,这样可以节省
    内存空间,等搜索完,再将路径重新赋值进去,tql,剩下就没啥坑点了,直接四个方向搜索,到递归出口就结束

class Solution {
public:
    vector<vector<int>> v;
    bool exist(vector<vector<char>>& board, string word) {
            rows=board.size();
            lines=board[0].size();
            for(int i=0;i<rows;i++)
            {
                for(int j=0;j<lines;j++)
                {
                    if(dfs(board,word,i,j,0))
                    {
                        return true;
                    }
                }
            }
            return false;

    }
private:
    int rows; //行数
    int lines; //列数
    bool dfs(vector<vector<char>>& board,string word,int x,int y,int k)
    {
        if(x>=rows||x<0||y>=lines||y<0||board[x][y]!=word[k])
        {
            return false;
        }
        if(k==word.size()-1)
        {
            return true;
        }
        board[x][y]='';
        int dx[]={-1,0,1,0};
        int dy[]={0,1,0,-1};
        for(int q=0;q<4;q++)
        {
            int m=x+dx[q];
            int n=y+dy[q];
            if(dfs(board,word,m,n,k+1))
            {
                return true;
            }
        }
        board[x][y]=word[k];
        return false;
        
    }
};
原文地址:https://www.cnblogs.com/YenKoc/p/14333725.html