pku 1696 Space Ant(转角,凸包扩展)

来源:互联网 发布:华中数控铣床编程实例 编辑:程序博客网 时间:2024/04/25 21:37

有一个外星人,只会左转不会右转,走路的时候还会在地上留下痕迹,外星人不能越过自己留下的痕迹。

平面上有n个点,外星人从最下面一个位置出发,问最多能走遍平面上的多少个点,怎么走。

 

因为是从最下面的位置出发,很明显一直沿着最外围的点走,是可以走遍所有点的。这样的寻点和凸包很像,只是在走到凸包的最后一个节点时,不去连接起始节点,而是往凸包内部继续寻找。

 

出发后,尽量找转角小的点。

一种做法是用向量点积求转角的cos值来比较,这样做的缺点是运算量大,角度的比较会有点麻烦。

另一种做法,先任意选定一个点作为下一个节点,然后和剩下的节点用向量叉积比较,判断向量方向关系,选择更靠右边的向量。这样做所有的运算都是整数运算,而且比较方便。

两种做法的时间效率都是O(n^2)。还有一点需要注意的是转角相同的时候选择距离近的点。