本题数据范围很小, 因此直接爆搜;
从每一个单位开始, 枚举上下左右四个方向的走法, 记录得到的数, 再用哈希表去记录数量;
#include <cstring>
#include <iostream>
#include <algorithm>
#include <unordered_map>
using namespace std;
const int N = 10;
int n, m, k;
int w[N][N];
unordered_map<int, bool> st;
int res;
int dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};
// x, y为走到单元的下标, z为记录路径上的数值, cnt为走的步数
void dfs(int x, int y, int z, int cnt)
{
if(cnt == k + 1)
{
if(!st[z]) res ++, st[z] = true;
return ;
}
for(int i = 0;i < 4;i ++)
{
int a = x + dx[i], b = y + dy[i];
if(a <= 0 || a > n || b <= 0 || b > m) continue;
dfs(a, b, z * 10 + w[a][b], cnt + 1);
}
}
int main()
{
cin >> n >> m >> k;
for(int i = 1;i <= n;i ++)
for(int j = 1;j <= m;j ++)
cin >> w[i][j];
for(int i = 1;i <= n;i ++)
for(int j = 1;j <= m;j ++)
dfs(i, j, 0, 0);
cout << res << endl;
return 0;
}