剣は、23マトリックス(DFS)を獲得するオファーのパスを指します

トピック

ここに画像の説明を挿入します

回答

DFS検索の簡単な質問です。2次元行列の各点を開始点として、dfsを開始します。条件のいずれかが満たされている限り、trueを返すことができます。

コード

class Solution {
    
    
public:
    bool dfs(vector<vector<char>> &matrix, string &str, int len, int x, int y) {
    
    
    if (matrix[x][y] != str[len]) return false;
    if (len == str.size() - 1) return true;
    char t = str[len];
    matrix[x][y] = '*';  //标记一个从未出现过的字符
    int dx[4] = {
    
    1, -1, 0, 0};
    int dy[4] = {
    
    0, 0, 1, -1};
    for (int i = 0; i < 4; i++) {
    
    
        int a = x + dx[i], b = y + dy[i];
        if (a >= 0 && a < matrix.size() && b >= 0 && b < matrix[a].size()) {
    
    
            if (dfs(matrix, str, len + 1, a, b)) {
    
    
                return true;
            }
        }
    }
    matrix[x][y] = t;   //还原
    return false;
}

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;

}
};

おすすめ

転載: blog.csdn.net/qq_44791484/article/details/114987593