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;
}