【发布时间】:2020-07-26 15:47:16
【问题描述】:
我是一名高中生,最近参加了一个编程比赛,遇到了一个我不知道如何解决的问题:
给定一个封闭在 100x100 区域中的迷宫,根据所有墙壁的位置确定具有给定半径的圆是否可以穿过迷宫。墙将被定义为连接空间内两个点的线,您将获得圆的起点和终点。圆圈必须以起点为中心并接触目标点才能成功穿过迷宫。最多有 20 面墙。圆的半径和墙壁的位置可以“任意”精确。 (在这种情况下,“任意”仅表示在很远的范围内 - 比如说,最多小数点后 10 位)。
这是一个例子。如果这是输入:
Radius = 2.8
Start = (5,5), Destination = (95,95)
Walls (a wall connects each pair of points):
(20,0) to (27.5,22.6)
(27.5,22.6) to (55.1,35.5)
(55.1,35.5) to (80.3,80,4)
(80.3,80,4) to (95,63.9)
(1.7,25.8) to (17.5,53.2)
(17.5,53.2) to (56.4,69)
(56.4,69) to (67.9,90.6)
(85.6,98.94512) to (87.3,92.5)
那么这个(在desmos上制作)就是迷宫的样子(蓝色圆圈只是为了显示圆圈有多大):
如果问题在量化网格中,我会知道如何解决问题,但墙壁的确切位置和圆的半径可以任意精确。我曾想过使用“右手法则”来寻找路径,但我不知道如何在非量化空间中实现(我对方法也不是很熟悉)。
我将如何解决这个问题?有人可以给我指出一个算法、一个链接、一些伪代码,或者只是一种直觉,可以帮助我理解如何解决这个问题吗?任何帮助表示赞赏。谢谢!
【问题讨论】: