#abc378d. [ABC378] Count Simple Paths

0
    ID: 9037 传统题 2000ms 1024MiB 尝试: 0 已通过: 0 难度: (无) 上传者: 标签>AtCoderABC378D搜索深度优先搜索回溯

[ABC378] Count Simple Paths

问题陈述

有一个由 H×WH \times W 个格子组成的网格。用 (i,j)(i, j) 表示从上往下第 ii 行、从左往右第 jj 列的格子。

若 Si,jS_{i,j} 为 .,则格子 (i,j)(i, j) 为空;若为 #,则为障碍。

请计算从某个空格子出发,进行 KK 次移动到相邻格子(上、下、左、右)的方案数,要求不经过障碍格子,且不重复访问同一个格子。

具体来说,计算满足以下条件的长度为 K+1K+1 的序列 ((i0,j0),(i1,j1),…,(iK,jK))((i_0, j_0), (i_1, j_1), \dots, (i_K, j_K)) 的数量。

  • 对于每个 0≤k≤K0 \leq k \leq K,都有 1≤ik≤H1 \leq i_k \leq H,1≤jk≤W1 \leq j_k \leq W,且 Sik,jkS_{i_k, j_k} 为 .。
  • 对于每个 0≤k≤K−10 \leq k \leq K-1,都有 ∣ik+1−ik∣+∣jk+1−jk∣=1|i_{k+1} - i_k| + |j_{k+1} - j_k| = 1。
  • 对于每个 0≤k<l≤K0 \leq k < l \leq K,都有 (ik,jk)≠(il,jl)(i_k, j_k) \neq (i_l, j_l)。

约束

  • 1≤H,W≤101 \leq H, W \leq 10
  • 1≤K≤111 \leq K \leq 11
  • HH、WW、KK 为整数。
  • 每个 Si,jS_{i,j} 为 . 或 #。
  • 至少有一个空格子。

输入

输入从标准输入按以下格式给出:

HWKH W K S1,1S1,2…S1,WS_{1,1}S_{1,2}\dots S_{1,W} S2,1S2,2…S2,WS_{2,1}S_{2,2}\dots S_{2,W} ⋮\vdots SH,1SH,2…SH,WS_{H,1}S_{H,2}\dots S_{H,W}

输出

输出答案。

样例输入 1

2 2 2
.#
..

样例输出 1

2

可能的路径有以下两条:

  • (1,1)→(2,1)→(2,2)(1,1) \rightarrow (2,1) \rightarrow (2,2)
  • (2,2)→(2,1)→(1,1)(2,2) \rightarrow (2,1) \rightarrow (1,1)

样例输入 2

2 3 1
.#.
#.#

样例输出 2

0

样例输入 3

10 10 11
....#..#..
.#.....##.
..#...##..
...#......
......##..
..#......#
#........#
..##......
.###....#.
...#.....#

样例输出 3

218070