AcWing_3502 不同路径数(DFS+哈希,unordered_set)

AcWing

3502. 不同路径数

DFS. 类似于天梯赛_L3-004 肿瘤诊断(三维BFS)。使用了字符串哈希unordered_set存储出现过的路径,最后输出哈希表存储的元素个数。

#include <bits/stdc++.h>
using namespace std;
int n, m, k;
const int N = 10;
unordered_set<string> str;
int mat[N][N];
int x[4] = {1, 0, -1, 0};
int y[4] = {0, 1, 0, -1};
void dfs(int i, int j, int dep, string s){
    s += (char)(mat[i][j] + '0');
    if(dep >= k){
        str.insert(s);
        return;
    }
    for(int p = 0; p <= 3; p++){
        if(i + y[p] <= n && i + y[p] >= 1 && j + x[p] <= m && j + x[p] >= 1)
            dfs(i + y[p], j + x[p], dep + 1, s);
    }
}
int main(){
    cin >> n >> m >> k;
    for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) cin >> mat[i][j];
    for(int i = 1; i <= n; i++) for(int j = 1; j <= m; j++) dfs(i, j, 0, "");
    cout << (int)str.size() << endl;
    return 0;
}