#P17550. PM2944 圆弧路径
PM2944 圆弧路径
题目描述
给定一个大小为 的规则方格,其中一些单位方格被封锁。你需要从点 出发,到达点 ,并且路径不能穿过任何被封锁方格的内部。
路径只能由若干段 圆弧(四分之一圆)组成。每段圆弧必须满足:
- 半径为正整数,因此圆弧的起点和终点都位于整数格点上;
- 圆弧在起点和终点处的切线都必须与 轴或 轴平行;
- 圆弧不能穿过任何被封锁方格的内部。
圆弧允许经过被封锁方格的角点,也允许从两个仅共享一个角点的封锁方格之间穿过。路径本身允许自交。
网格中 . 表示空方格,# 表示被封锁方格。
请找出从 到 所需圆弧数量的最小值。如果不存在合法路径,输出 。
下图给出了一个圆弧路径示意:

输入格式
第一行输入两个整数 ,分别表示网格的行数和列数。
接下来 行,每行一个长度为 的字符串,只包含字符 . 和 #。
第 行第 个字符描述对应的单位方格是否被封锁。
输出格式
输出一个整数,表示从 到 所需的最少圆弧数。
若不存在合法路径,输出 。
样例 1
输入
2 2
..
..
输出
1
样例 2
输入
2 3
...
...
输出
-1
样例 3
输入
6 4
....
.##.
.##.
.##.
.##.
....
输出
7
样例 4
输入
8 12
....########
###..###...#
..##..#.##.#
...##..#...#
....#..#...#
....#..###..
....####.##.
..........#.
输出
4
样例解释
- 样例 1 中,只需一个半径为 的四分之一圆即可从 到达 。
- 样例 2 的两个维度奇偶性不同,因此无法由若干四分之一圆连接两个对角点。
- 样例 3 中至少需要 段半径为 的圆弧。
- 样例 4 即题目示意中的情形,最优答案为 。
数据范围
- ;
- 网格中的每个字符均为
.或#。