3502. 不同路径数(简单dfs,但是哈希判重)

https://www.acwing.com/problem/content/3505/
dfs搜索,要点就是要判重,我首先用的数组模拟判重,但是数据量一大就会SE,后面就用哈希表了

#include<iostream>
#include<unordered_set>
using namespace std;
const int N = 1e4;
unordered_set<int>S;
int map[N][N];
bool ans[N];
int n,m,k;
int cnt;
int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
void dfs(int x,int y,int step,int sum)
{
    if(step==k)
    {
        S.insert(sum);
        return;
        // for(int i=0;i<N;i++)
        //     if(ans[sum]==true)
        //         return;//重复
        // //未重复
        // ans[sum]=true;
        // cnt++;
        // return;
    }
    for(int i=0;i<4;i++)
    {
        int a=x+dx[i],b=y+dy[i];
        if(a>=0 && b>=0 && a<n && b<m)
            dfs(a,b,step+1,sum*10+map[a][b]);
    }
}
int main()
{
    cin >> n >> m >> k;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            cin >> map[i][j];
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            dfs(i,j,0,map[i][j]);
    cout << S.size() << endl;
    // cout << cnt << endl;
    return 0;
}
posted @ 2023-03-01 13:56  风乐  阅读(15)  评论(0)    收藏  举报