UVA1387 Driving Directions
题目背景
与人们的常识不同,外星飞行器其实不能在地球表面任意飞行。
它们在升空和落地时会消耗大量能量,所以外星人会先把飞行器悬停在某地,然后进行低空飞行执行任务,最后在某个终点起飞离开地球。
在人类文明较为落后时,这是很简单的,因为可以直接飞过低矮的建筑,而且最短路径往往只是一条简单的线段。但是呢,现代城市有太多无法飞跃的高大的楼房,这也使在城市中执行任务十分困难。
一位外星间谍找到了你,请你写出飞行器在城市中的导航系统。而你的第一个任务(为了向外星人证明你的忠诚)是求出飞行器在城市中从一点到另一点的最短距离。
题目描述
为了简化问题,飞行器可以看成是平面直角坐标系上半径为 $r$ 的圆,而楼房可以看成是两维都平行于坐标轴的矩形。
飞行器可以朝**任意**方向移动,但在移动过程中不能与楼房相撞(可以相切)。
你需要求出飞行器的圆心从一点移动到另一点的最短距离。
输入格式
有多组测试数据。
每组数据,第一行输入两个整数 $r,n$ 代表飞行器半径和楼房个数。
第二行,四个整数 $sx,sy,tx,ty$ 代表飞行器的起点和终点。
之后 $n$ 行,每行 $x1,y1,x2,y2$ 代表这个楼房的左下角和右上角坐标。
输出格式
对于每组数据:
若无解,输出一行 “no solution”(不带引号)。
否则,输出飞行器的圆心从 $(sx,sy)$ 移动到 $(tx,ty)$ 的最短距离(保留六位小数)。
说明/提示
对于所有数据,满足 $1 \le r \le 100, 0 \le n \le 30$。
所有坐标绝对值不超过 $1000$。