Algorithm 在有障碍物的二维平面上寻找路径

Algorithm 在有障碍物的二维平面上寻找路径,algorithm,math,Algorithm,Math,我正试图解决一个编程任务,我已经被赋予,我没有丝毫的想法如何做 这就是问题所在: 皮包骨头的皮特被邀请参加一个花园的生日聚会。他真的不知道 我太喜欢派对了,但听说生日蛋糕要 真是太棒了,他不想错过尝试的机会 只有一个小问题。有一个自动喷水灭火系统 安装在花园里,通过认识他的朋友,有一个很高的 有可能有人把它当作派对恶作剧。皮特喜欢蛋糕,但是 我真的很讨厌被淋湿。幸运的是,他找到了那座花园的草图 有喷水装置的位置以及每个喷水装置可以喷水的距离 水 花园看起来像一个长方形,一边是开放的,另一边是房

我正试图解决一个编程任务,我已经被赋予,我没有丝毫的想法如何做

这就是问题所在:

皮包骨头的皮特被邀请参加一个花园的生日聚会。他真的不知道 我太喜欢派对了,但听说生日蛋糕要 真是太棒了,他不想错过尝试的机会

只有一个小问题。有一个自动喷水灭火系统 安装在花园里,通过认识他的朋友,有一个很高的 有可能有人把它当作派对恶作剧。皮特喜欢蛋糕,但是 我真的很讨厌被淋湿。幸运的是,他找到了那座花园的草图 有喷水装置的位置以及每个喷水装置可以喷水的距离 水

  • 花园看起来像一个长方形,一边是开放的,另一边是房子
  • 蛋糕要放在房子里了
  • 另外两边都有栅栏,所以人们不能从那里进去,房子也没有后门。皮特有兴趣 知道是否有可能进入花园并到达房子 没有被淋湿的危险
为了简单起见,我们可以认为花园的地图是笛卡尔的 坐标系

  • 花园是一个矩形,其边平行于轴,其左下角位于原点(0,0)

  • 花园的入口在左边,房子在右边

  • 喷水装置以圆心和半径表示。在这样一个圈子里走到任何地方都可能让你淋湿

  • 就这个问题而言,由于皮特非常瘦,我们可以把他想象成一个在空间中旅行的点,带着真实的感觉 数字作为坐标

输入规范标准输入的第一行包含两个 用空格分隔的整数H和W,即 花园

下一行包含喷水装置的数量N。之后是N行 遵循三个空间分隔的整数,每一个,席,彝和Ri。 这是将喷水器描述为一个圆心(Xi,Yi)和 半径Ri

一,≤ N≤ 128

一,≤ H、 W≤ 1024

0≤ 席≤ W

0≤ 彝族≤ H

一,≤ Ri≤ 1024

输出规格

输出包含“CAKE”(不带引号)的单行(如果是) 可以在不被淋湿的情况下到达房子,“没有蛋糕”(没有 否则


提前感谢帮助者

因为您没有显示任何代码,而且您只是隐式地请求帮助,所以我将给出一个关键想法,并将数学和实现留给您

瘦小的皮特可以拿到蛋糕而不被弄湿,除非在花园的底部和顶部之间有一连串的喷水圈。换句话说,我们可以假设皮特成功了。但是看看所有的圆圈。我们看是否有任何圆与花园的底边相交——这是一个简单的数学问题。如果没有,皮特真的成功了。如果有,请查看是否有另一个圆与第一个圆相交,然后是否有另一个圆与第二个圆相交,等等。最后,您可以查看此链中的最后一个圆是否与花园的顶部边缘相交。如果有任何这样的相交圆链也相交于花园的顶部和底部,可怜的皮特就会挨饿。(请注意,只有一个与顶部和底部相交的圆也会让Pete感到沮丧——将其视为一条一条链。)

下面是竞赛PDF中第二个示例的示意图,您可以看到没有跨越圆的链,因此Pete成功了

这是第三个例子的图表,Pete失败了。请注意,左侧有一条四个圆圈组成的链条,蓝色,横跨花园

考虑到这个想法,有一个明显的
O(N^2)
算法来查找所有相交圆对,还有一个
O(N)
算法来查找与花园顶面和底面相交的圆。您可以使用图论中的路径查找算法来解决您的问题。将上边、下边和圆视为图中的节点,如果两个节点相交,则两个节点通过一条边连接。然后在表示顶面和底面的节点之间搜索路径


祝你在计算数学、算法和代码方面好运。

这是什么?竞赛问题还是作业?这是竞赛中的一个问题,但竞赛已经结束。你能添加一个问题的链接吗?这是一个问题pdf的链接:不幸的是,竞赛网站不再在线