在Python中查找矩形区域内不接触炸弹的连续路径的程序
假设我们有一个数组mat,其中元素的形式为[p,q,r],其中p,q是几何坐标,r是半径值。数组中的项目是给定宽度w矩形区域内炸弹的位置。矩形无限长,受到x坐标x = 0至x = w的界限。炸弹位置中的r值表示炸弹的安全半径,这意味着小于炸弹的半径的任何东西都会引爆它。因此,我们必须绘制一条连续的路径,从每个炸弹下方开始,结束于每个炸弹上方,而不接触任何一个炸弹。如果我们能绘制出这条线路,我们将打印True,否则我们将打印False。
因此,如果输入如下所示mat =
0 | 1 | 2 |
---|---|---|
3 | 2 | 1 |
2 | 1 | 1 |
,w = 4; 则输出将为False。
为了解决这个问题,我们将按照以下步骤进行 –
- 定义函数insec() 。 这将采用p,q
- x1:= p [1],x2:= p [2]
- y2:= q [1],y4:= q [2]
- r1:= p [3],r2:= q [3]
- d:=(x1-x2)(x1-x2)+(y1-y2)(y1-y2)
- dec:=(r1 + r2)*(r1 + r2)
- 如果d <= dec,则返回True,否则返回False
- 基于x坐标值对矩阵进行排序
- temp:一个新列表
- 如果mat [0] [0] – mat [0] [2]> 0,则
- 返回True
- 对于mat中的每个p,q,r,执行以下操作
- min_wid:= p – r
- max_wid:= p + r
- 如果temp的大小与0相同,则
- 在temp的末尾添加包含(p + r,p,q,r,p – r,p + r)的列表
- 否则,
- mx:=(维护排序顺序的列表[p – r,-p,q,r,0,0]中元素可以插入的位置 – 1) 的最大值,0
- in_list:一个包含元素(p + r,p,q,r,p – r,p + r)的新列表
- 对于范围mx到temp大小的i,执行以下操作
- 如果insec(temp [i],in_list)为True,则
- max_wid:=(max_wid,temp [i,-1])的最大值
- min_wid:=(min_wid,temp [i,-2])的最小值
- in_list的倒数第二个元素:= min_wid
- in_list的最后一个元素:= max_wid
- 在temp中插入in_list,维护排序顺序
- 如果min_wid <= 0且max_wid >= w,则
- 返回False
- 返回True
示例
让我们看以下实现,以获得更好的理解 –