Algorithm 用一条线将一组圆分成两等分

Algorithm 用一条线将一组圆分成两等分,algorithm,geometry,Algorithm,Geometry,我已经试着回答这个问题好几个月了,但我还是被卡住了 这个问题需要我编写一个程序来输出YES或NO,以确定给定的集合是否有一条可以分割它的线 我正在寻找一种可能的算法来确定答案,一旦我牢牢掌握了答案,我想把它解释成代码 给定2D平面上保证不接触的等长圆集。确定是否可以通过集合画一条线,将其精确地分成两部分,而不与任何圆相交 圆半径大于零 没有圆彼此接触或包含 一组长度2始终是可能的 每个圆的大小都是独一无二的 输入格式: N - number of circles in set x y r - N

我已经试着回答这个问题好几个月了,但我还是被卡住了

这个问题需要我编写一个程序来输出YES或NO,以确定给定的集合是否有一条可以分割它的线

我正在寻找一种可能的算法来确定答案,一旦我牢牢掌握了答案,我想把它解释成代码

给定2D平面上保证不接触的等长圆集。确定是否可以通过集合画一条线,将其精确地分成两部分,而不与任何圆相交

圆半径大于零 没有圆彼此接触或包含 一组长度2始终是可能的 每个圆的大小都是独一无二的 输入格式:

N - number of circles in set
x y r - N lines of: x coordinate, y coordinate, radius
Input repeats until EOF
每个测试用例的输出是或否

输入示例:

4
0 0 20
0 40 20
0 30 10
40 -30 10
4
0 0 20
0 40 20
20 40 20
20 -40 20
输出:

YES
NO
编辑:我解决问题的尝试 第一次尝试是找到所有可以解决这个问题的直线,如果每个圆都是零半径点,那么给我一组可能的解决方案

链接到

之后,我将返回半径,然后迭代每个可能的解决方案

这个算法非常慢,我没有费心计算O时间,因为所需的算法需要在一秒钟的合理时间范围内运行

我的第二次尝试是将这些圆投影到y轴和x轴上,并旋转集合,直到存在x轴或y轴的一部分,而没有任何圆的阴影,同时将集合拆分为两个

这种方法只需要1/2pi弧度的最大旋转来确定答案,但编程过程复杂且缓慢


我在网上找不到这个问题,因为它是去年我所在大学的一位教授在论文中提出的。

立方复杂度的简单算法:

查找所有圆对的公共切线。有4*n*n-1/2~n^2条切线

对于每个切线,检查其是否与所有圆相交。n*n^2=n^3个操作


我认为基于切线方向排序的算法可能存在更高的复杂性,您尝试过什么吗?关于^3算法并不难。@Caleb,您可以添加问题源,如project Euler、spoj等,如果有人已经解决了这个问题,他们可以帮助您。@Prune-我已经更新了这个问题,以反映我的work@dkb,这个问题是一位教授写的,所以我找不到这个问题的在线记录。我知道其他人已经回答了,但我无法获得他们的姓名/联系他们。@MBo,我已经用一些尝试编辑了这个问题。我不相信我没有想到这一点。我试试看。谢谢