AcWing 3502. 不同路径数
原题链接
简单
作者:
Money_How
,
2024-06-11 11:41:42
,
所有人可见
,
阅读 1
#include<iostream>
#include<map>
using namespace std;
const int N = 6;
map<int,int> ma;
int q[N][N];
int n,m,k,res;
int dx[4] = {0,1,0,-1},dy[4] = {1,0,-1,0};
void dfs(int x,int y,int u,int num)
{
if(u>k)
{
if(!ma[num]) //用map来判断这个组合是否已经使用过
{
ma[num] = 1;
res++;
}
return;
}
for(int i = 0;i<4;i++)
{
int xx = x+dx[i],yy = y+dy[i];
if(xx<1||xx>n||yy<1||yy>m) continue; //判断走的路径是否越界 注意n和m
dfs(xx,yy,u+1,num*10+q[xx][yy]);//正常dfs
}
}
int main()
{
cin>>n>>m>>k;
for(int i = 1;i<=n;i++)
for(int j = 1;j<=m;j++)
cin>>q[i][j];
for(int i = 1;i<=n;i++)
for(int j = 1;j<=m;j++)
dfs(i,j,1,q[i][j]); //因为每个点都可以作为起点 所以直接通过每个点dfs一遍
cout<<res;
return 0;
}