有一个外星人,只会左转不会右转,走路的时候还会在地上留下痕迹,外星人不能越过自己留下的痕迹。
平面上有n个点,外星人从最下面一个位置出发,问最多能走遍平面上的多少个点,怎么走。
因为是从最下面的位置出发,很明显一直沿着最外围的点走,是可以走遍所有点的。这样的寻点和凸包很像,只是在走到凸包的最后一个节点时,不去连接起始节点,而是往凸包内部继续寻找。
出发后,尽量找转角小的点。
一种做法是用向量点积求转角的cos值来比较,这样做的缺点是运算量大,角度的比较会有点麻烦。
另一种做法,先任意选定一个点作为下一个节点,然后和剩下的节点用向量叉积比较,判断向量方向关系,选择更靠右边的向量。这样做所有的运算都是整数运算,而且比较方便。
两种做法的时间效率都是O(n^2)。还有一点需要注意的是转角相同的时候选择距离近的点。