题解 | #矩阵中的路径#

矩阵中的路径

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

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param matrix char字符型vector<vector<>> 
     * @param word string字符串 
     * @return bool布尔型
     */
    int nex[4][2] = {{0,-1},{0,1},{-1,0},{1,0}};
    vector<vector<char> > mp;
    bool vis[30][30];
    bool flag;
    void dfs(int x,int y,string word,string now,int index){
        cout << now << endl;
        if(now==word){
             flag = true;
            return ;
        }
        for(int i=0; i<4; i++){
            int xx = x + nex[i][0];
            int yy = y + nex[i][1];
            if(xx<mp.size() && xx>=0 && yy<mp[xx].size() && yy>=0 && !vis[xx][yy] && mp[xx][yy]==word[index]){
                vis[xx][yy] = 1;
                now += mp[xx][yy];
                dfs(xx,yy,word,now,index+1);
                vis[xx][yy] = 0;
                now.pop_back();
            }
        }
    }
    bool hasPath(vector<vector<char> >& matrix, string word) {
        mp = matrix; 
        flag = false;
        for(int i=0; i<matrix.size(); i++){
            for(int j=0; j<matrix[i].size(); j++){
                if(matrix[i][j]==word[0]){
                    for(int k=0; k<30; k++)
                        for(int h=0; h<30; h++)
                            vis[k][h] = 0;
                
                    string t = "";
                    t += word[0];
                    dfs(i,j,word,t,1);
                    if(flag) return true;
                }
            }
        }
        return false;
    }
};
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务