剑指offer.矩阵中的路径

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Wilder_ting/article/details/88922419

剑指offer.矩阵中的路径

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。

路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。

如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。

注意:

  • 输入的路径不为空;
  • 所有出现的字符均为大写英文字母;
样例
matrix=
[
  ["A","B","C","E"],
  ["S","F","C","S"],
  ["A","D","E","E"]
]

str="BCCE" , return "true" 

str="ASAE" , return "false"

想法:回溯法,逐个遍历每一种情况。

class Solution{
public:
bool hasPath(vector<vector<char>>& matrix, string str) {
        for(int i = 0 ; i < matrix.size() ; i++){
            for(int j = 0 ; j < matrix[i].size(); j++){
                if(dfs(matrix, str, 0, i, j)){
                    return true;
                }
                
            }
        }
        return false;
    }

bool dfs(vector<vector<char>>& matrix, string& str, int u, int x, int y){
    if(matrix[x][y] != str[u])return false;
    if(u == str.size() - 1)return true;
    int dx[4] = {1, 0 , -1 , 0};
    int dy[4] = {0, 1 ,0 ,-1};
    char t = matrix[x][y];
    matrix[x][y] = '*';
    for(int i = 0 ; i < 4 ; i++){
        int a = x + dx[i];    
        int b = y + dy[i];
        if(a >=0 && a < matrixsize() && b >=0 && b < matirx[a].size()){
            if(dfs(matrix, str, u+1, x, y)){
                return true;
            }
            
        }
    }
    matrix[x][y] = t;
    return false;

}


}
posted @ 2019-03-30 16:05 Tingwei_chen 阅读( ...) 评论( ...) 编辑 收藏

猜你喜欢

转载自blog.csdn.net/Wilder_ting/article/details/88922419