题解 | #矩阵中的路径#

矩阵中的路径

http://www.nowcoder.com/practice/2a49359695a544b8939c77358d29b7e6

先放代码:

class Solution {
public:
    bool hasPath(vector<vector<char> >& matrix, string word) {
        int n = matrix.size(), m = matrix[0].size();
        int vis[205][205];
        //对vis矩阵进行初始化
        memset(vis, 0, sizeof(vis));
        for(int i=0; i<n; i++){
            for(int j=0; j<m; j++){
                if(matrix[i][j] == word[0]){
                    if(dfs(matrix, word, vis, i, j, 1, n, m)){
                        return true;
                    }
                    //状态恢复
                    vis[i][j]=0;
                }
            }
        }
        return false;
    }
    bool dfs(vector<vector<char>>& matrix, string word, int vis[][205], int x, int y, int p, int n, int m){
        //如果p等于word的长度,查找成功,返回true
        if(p == word.size()){
            return true;
        }
        //走过的元素不能再走,所以vis设置为1
        vis[x][y] = 1;
        //像四个方向的偏移量,分别是上,右,下,左
        int dxy[4][2] = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};
        for(int i=0; i<4; i++){
            int dx = x+dxy[i][0], dy = y+dxy[i][1];
            if(dx>=0 && dx<n && dy>=0 && dy<m && !vis[dx][dy] && matrix[dx][dy]==word[p]){
                if(dfs(matrix, word, vis, dx, dy, p+1, n, m)){
                    return true;
                }
                //恢复状态
                vis[dx][dy]=0;
            }
        }
        return false;
    }
};
全部评论

相关推荐

鼠鼠第一次实习,啥也不懂一直是自己一个人吃的饭,不会做工作老是被嫌弃,大人的世界是这样的吗?
我是星星我会发亮:好的mt有两种,一种愿意教你的,一种几乎什么活都不给你派让你很闲允许你做自己事情的
点赞 评论 收藏
分享
喜欢飞来飞去的雪碧在刷代码:可以试一试字节
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务