前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >奶酪【BFS】_法国有多少种奶酪

奶酪【BFS】_法国有多少种奶酪

作者头像
Java架构师必看
发布2022-06-01 08:10:58
3560
发布2022-06-01 08:10:58
举报
文章被收录于专栏:Java架构师必看

大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说奶酪【BFS】_法国有多少种奶酪,希望能够帮助大家进步!!!

题目链接


点从z=0为起点,想跑到z=h,只能在球内,或者是球表层上跑,问能否从起点跑到终点?

直接暴力bfs判断即可。

代码语言:javascript
复制
#include <iostream>
#include <cstdio>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <limits>
#include <vector>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <bitset>
//#include <unordered_map>
//#include <unordered_set>
#define lowbit(x) ( x&(-x) )
#define pi 3.141592653589793
#define e 2.718281828459045
#define INF 0x3f3f3f3f
#define eps 1e-8
#define HalF (l + r)>>1
#define lsn rt<<1
#define rsn rt<<1|1
#define Lson lsn, l, mid
#define Rson rsn, mid+1, r
#define QL Lson, ql, qr
#define QR Rson, ql, qr
#define myself rt, l, r
#define MP(a, b) make_pair(a, b)
using namespace std;
typedef unsigned long long ull;
typedef unsigned int uit;
typedef long long ll;
const int maxN = 1e3 + 7;
ll h, r;
int N;
struct node
{
    ll x, y, z;
    node(ll a=0, ll b=0, ll c=0):x(a), y(b), z(c) {}
    inline void In() { scanf("%lld%lld%lld", &x, &y, &z); }
} a[maxN];
ll _Dis2(node e1, node e2) { return (e1.x - e2.x) * (e1.x - e2.x) + (e1.y - e2.y) * (e1.y - e2.y) + (e1.z - e2.z) * (e1.z - e2.z); }
bool vis[maxN];
queue<int> Q;
inline bool bfs()
{
    while(!Q.empty()) Q.pop();
    for(int i=1; i<=N; i++)
    {
        if(a[i].z <= r)
        {
            vis[i] = true;
            Q.push(i);
        }
    }
    int u;
    while(!Q.empty())
    {
        u = Q.front(); Q.pop();
        if(a[u].z + r >= h) return true;
        for(int i=1; i<=N; i++)
        {
            if(vis[i]) continue;
            if(_Dis2(a[u], a[i]) <= 4LL * r * r)
            {
                vis[i] = true;
                Q.push(i);
            }
        }
    }
    return false;
}
int main()
{
    int T; scanf("%d", &T);
    while(T--)
    {
        scanf("%d%lld%lld", &N, &h, &r);
        for(int i=1; i<=N; i++) a[i].In();
        for(int i=1; i<=N; i++) vis[i] = false;
        printf(bfs() ? "Yes\n" : "No\n");
    }
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-012,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档