UVa 11853 战场(paintball)

分析1000x1000战场上的敌人分布,利用BFS判断是否存在安全路径从西至东穿越,避免敌人攻击范围。关键在于选取与边界交点以确保路径连通。
摘要由CSDN通过智能技术生成

有一个1000 * 1000的战场,战场西南角的坐标为(0,0) 西北角的坐标为(0,1000)。战场有n的敌人,第i个敌人的坐标为(xi,yi) 攻击范围为ri.为了避开敌人的攻击,在任意时刻,你与每个敌人的距离都必须严格大于等于它的攻击范围。你的任务是从战场的西边(x=0 y尽量北,即尽量大进入) 从战场的东边,类似进入的出。

要点:

  • 从上到下bfs一下 查看是否连通到底,如果连通到底,那就impossible
  • 为什么是选取连接左右的圆的靠南边的交点作为进出的值呢,因为是从上到下遍历的,如果走到某个圆与左右边界有交点,意味着这个圆与左右边界的交点的上方是封闭的区域。是无法走的。
#include<bits/stdc++.h>
using namespace std;

const int maxn = 1e3 + 10;
bool vis[maxn];

struct Circle {
   
    double x, y, r;
    friend istream& operator >> (istream &in, Circle &c) {
   
        in >> c.x >> c.y >> c.r;
        return in;
    }
    bool isTopConnect() {
   
        return y + r >= 1000 ;
    }
    bool isConnect(Circle &c) {
   
        return hypot(x - c.x, y - c.y) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值