问题陈述
有一个由 H×W 个格子组成的网格。用 (i,j) 表示从上往下第 i 行、从左往右第 j 列的格子。
若 Si,j 为 .,则格子 (i,j) 为空;若为 #,则为障碍。
请计算从某个空格子出发,进行 K 次移动到相邻格子(上、下、左、右)的方案数,要求不经过障碍格子,且不重复访问同一个格子。
具体来说,计算满足以下条件的长度为 K+1 的序列 ((i0,j0),(i1,j1),…,(iK,jK)) 的数量。
- 对于每个 0≤k≤K,都有 1≤ik≤H,1≤jk≤W,且 Sik,jk 为
.。
- 对于每个 0≤k≤K−1,都有 ∣ik+1−ik∣+∣jk+1−jk∣=1。
- 对于每个 0≤k<l≤K,都有 (ik,jk)=(il,jl)。
约束
- 1≤H,W≤10
- 1≤K≤11
- H、W、K 为整数。
- 每个 Si,j 为
. 或 #。
- 至少有一个空格子。
输入
输入从标准输入按以下格式给出:
HWK
S1,1S1,2…S1,W
S2,1S2,2…S2,W
⋮
SH,1SH,2…SH,W
输出
输出答案。
样例输入 1
2 2 2
.#
..
样例输出 1
2
可能的路径有以下两条:
- (1,1)→(2,1)→(2,2)
- (2,2)→(2,1)→(1,1)
样例输入 2
2 3 1
.#.
#.#
样例输出 2
0
样例输入 3
10 10 11
....#..#..
.#.....##.
..#...##..
...#......
......##..
..#......#
#........#
..##......
.###....#.
...#.....#
样例输出 3
218070