#297. 迷宫

迷宫

题目描述

在一个古老森林的深处,探险家发现了一个神秘的迷宫,刻在地上,形成一个 NNMM 列的网格。迷宫中的每个格子要么是闪烁的冰面,要么是不可移动的巨石。网格由 NN 个铭文表示,标记为 T1,T2,,TNT_1, T_2, \ldots, T_N,每个铭文包含 MM 个符号。如果铭文 TiT_i 的第 jj 个符号——对应位置 (i,j)(i, j)——是 .,则该格子是冰;如果是 #,则是巨石。

迷宫的外围(第 1 行、第 NN 行、第 1 列、第 MM 列)完全由巨石构成,形成天然屏障。探险家从固定的起点 (2,2)(2, 2) 开始探险,根据森林的古老传说,该点始终是冰。

探险家拥有独特的能力:他可以沿着冰面朝四个基本方向——上、下、左、右——滑行,但一旦选定方向,他会一直滑行直到撞上巨石或非冰格为止。他可以选择不滑行或任意多次滑行,每次探索新的路径。他的同伴 dash 挑战他计算在这个魔法迷宫中,他能到达或经过(包括滑过的)的所有不同格子总数。

输入格式

第一行包含两个正整数 NNMM,表示网格的尺寸。

接下来的 NN 行,每行包含一个长度为 MM 的字符串 TiT_i,由 .(冰)或 #(巨石)组成,描述网格内容。

输出格式

输出一个整数,能触及或经过的独特格子总数。

样例

6 6
######
#....#
#.#..#
#..#.#
#....#
######
12

解释 #1

可以通过以下滑行到达 (5,5)(5,5)

(2,2)(5,2)(5,5)(2, 2) \to (5, 2) \to (5, 5)

他也可以通过 (2,2)(2,5)(2, 2) \to (2, 5) 经过 (2,4)(2, 4)

但由于迷宫的布局,他无法到达 (3,4)(3, 4)

21 25
#########################
#..............###...####
#..............#..#...###
#........###...#...#...##
#........#..#..#........#
#...##...#..#..#...#....#
#..#..#..###...#..#.....#
#..#..#..#..#..###......#
#..####..#..#...........#
#..#..#..###............#
#..#..#.................#
#........##.............#
#.......#..#............#
#..........#....#.......#
#........###...##....#..#
#..........#..#.#...##..#
#.......#..#....#..#.#..#
##.......##.....#....#..#
###.............#....#..#
####.................#..#
#########################
215

数据范围

  • 3N,M2003 \leq N, M \leq 200
  • 每个 TiT_i 是长度为 MM 的字符串,仅包含 .#
  • 网格的边缘(首行、末行、首列、末列)均为 #(巨石),且 (2,2)(2,2) 始终为 .(冰)。