#P2678. Mothy
Mothy
描述
Mothy 是一种小飞蛾。Mothy 和他的母亲穿着一条非常旧的牛仔裤。因为牛仔裤很旧,所以上面布满了补丁。有时,补丁会相互重叠。每个补丁都是一个凸多边形,由一些不同于棉花的材料制成。Mothy 想以最快的方式去找他的母亲。他不吃东西就不能动,而且由于他的年龄,他除了牛仔裤和棉线之外什么都不能吃。尽管 Mothy 年纪大了,但他非常聪明,他可以按照精确的坐标移动,但他无法计算它们。编写一个程序来计算从 Mothy 的位置到他母亲的位置的最小路径的长度。Mothy 必须能够通过这条路。考虑到这条旧牛仔裤被放置在平面上并且足够大。Mothy 只能在牛仔裤的表面移动,因为他不够大,无法穿透牛仔裤。
因为 Mothy 太小了,他应该被视为一个点。Mothy 还可以在任何补丁的边缘移动,因为它们是用棉线缝制的。Mothy 可以在公共边上移动,但不能位于任何面片的顶部。
输入
输入的第一行包含一个整数 ,指示测试用例的数量。每个测试用例都以数字 个补丁和四个整数开头 – Mothy 位置的坐标 以及他母亲位置的坐标 ,由空格分隔()。每个图块都在一条单独的行上描述,从顶点数开始,后跟图块的每个顶点的一对整数坐标(),用空格分隔。多边形的顶点总数不会超过 。
输出
对于每个测试用例,程序必须在单独的行上输出 Mothy 和他母亲之间的最短路径的长度。结果应四舍五入到小数点后 位。如果 Mothy 无法联系到他的母亲,则程序必须输出 。
输入数据 1
2
1 0 0 4 3
3 1 1 4 4 1 4
2 0 0 5 5
4 1 0 4 0 4 1 1 2
3 3 3 4 4 5 2
输出数据 1
5.000
7.236
来源
2005 年东南欧