不同路径数
给定一个 n × m 的二维矩阵,其中的每个元素都是一个 [1,9] 之间的正整数
从矩阵中的任意位置出发,每次可以沿上下左右四个方向前进一步,走过的位置可以重复走
走了 k 次后,经过的元素会构成一个 k + 1 位数。
请求出一共可以走出多少个不同的 k + 1 位数。
输入格式
第一行包含三个整数 n, m, k。
接下来 n 行,每行包含 m 个空格隔开的整数,表示给定矩阵
输出格式
输出一个整数,表示可以走出的不同 k+1 位数的个数
数据范围
对于 30% 的数据, 1 ≤ n, m ≤ 2, 0 ≤ k ≤ 2
对于 100% 的数据,1 ≤ n, m ≤ 5, 0 ≤ k ≤ 5, m × n > 1
输入样例:
|
|
输出样例:
|
|
分析
- 遍历起点:矩阵中每个
(i, j)坐标都可以作为起点,进行搜索 - 深度优先搜索进行数的构造:
- 递归地沿上下左右
4个方向移动。 - 走
k步后,将生成的k + 1位数存入unordered_set,去重后计算数量 - 递归参数包括当前位置
(x, y)、已走步数u、当前构造的数字cur
- 递归地沿上下左右
- 输出不同数的总个数
时间复杂度
每个格子最多 4^k 次递归调用,整体复杂度 O(nm * 4^k)
空间复杂度
空间复杂度为 O(1)
C++代码
|
|