题解 | #矩阵中的路径#

矩阵中的路径

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;
    }
};
全部评论

相关推荐

勤奋努力的椰子这就开摆:美团骑手在美团工作没毛病
投递美团等公司10个岗位
点赞 评论 收藏
分享
11-24 19:04
已编辑
湖南工商大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务