有一个正方形的房间,房间的四壁都是镜子。房间里有一个天使和一个恶魔。假设房间是一个单位正方形 [0, 1] × [0, 1] ,那么天使和恶魔便是这个正方形内的两个点 (a, b) 和 (c, d) 。恶魔想要在原地发射致命激光杀死天使(激光可以无限地在镜子间反射)。天使可以根据恶魔的位置,预先在房间里放置一些守卫为自己挡住激光(守卫实际上也是一个个点)。当然,天使可以在自己周围密密麻麻地放一圈守卫,围成一个封闭的圆形,从而让恶魔不管朝什么方向发射激光,最终都无法击中天使。我们的问题是,能把守卫的数量减少到可数个点吗?能把守卫的数量减少到有限个点吗?
这是一个非常经典的问题,我已经见过不止一次了。它可以重新叙述为很多更有趣的实际问题。去年的这个时候,网友 Spark 发来邮件,分享了他在看台球比赛时想到的一个问题:最少需要摆放多少个球,才能挡住白球到目标球的所有可能的路线,迫使对手犯规?如果我们把台球也抽象成一个一个的点,问题就和前面提到的情况一样了。
今天,我终于看到了这个问题的答案,颇为激动,在此和大家分享。