#P1556. The Doors
The Doors
问题描述
我们需要计算在一个包含障碍墙的密闭空间内,从起点到终点的最短路径长度。该密闭空间的边界固定为、、和。空间内部可能包含到道垂直墙壁,每道墙上有两个门洞。
示例说明
图示密闭空间对应的输入数据为:
2
4 2 7 8 9
7 3 4.5 6 7
其中最短路径长度计算结果为(如原题图示)
输入格式
- 多组测试数据,以结束
- 每组数据:
- 第一行:墙壁数量()
- 接下来行:每行描述一道墙,包含个实数:
- 第一个数:墙壁的坐标()
- 后四个数:门洞的坐标端点(按升序排列)
- 墙壁坐标按升序排列
输出格式
- 对每组数据输出一行,表示最短路径长度(保留两位小数)
输入输出示例
输入
1
5 4 6 7 8
2
4 2 7 8 9
7 3 4.5 6 7
-1
输出
10.00
10.06
计算原理
- 空间建模:将密闭空间视为二维平面,边界为,
- 障碍处理:每道垂直墙在处,门洞范围为和
- 路径规划:通过门洞的连通性计算最短路径,需满足:
- 路径由直线段组成
- 每段直线必须穿过有效门洞
- 路径总长度
实现要求
程序需要处理多组测试数据,对每组数据:
- 解析墙壁和门洞信息
- 构建可达性图(将门洞端点作为节点)
- 应用图搜索算法(如Dijkstra算法)计算最短路径
- 输出结果保留两位小数
注意:当时,最短路径即为直线距离