zoukankan      html  css  js  c++  java
  • NOIP2017 奶酪(BFS)

    解决本题的算法:

        ·深度优先搜索(DFS)

           ·广度优先搜索(BFS)

           ·并查集

    本篇将介绍广搜做法。

     

       题解

      做法与dfs相似,首先找出所有与下表面通的洞存入a数组(模拟队列),依次寻找能和下表面相通的洞存入队列,对于每一个存入的洞i,判断如果z[i]+r>=h,则可以到达上表面,停止搜索。

      相比于dfs,广搜的做法跑量可能更大一些。

    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    long long x[1005],y[1005],z[1005];
    bool v[1005],tong;
    int a[1005];
    int main()
    {
        int T,i,j,k,n,h,r;
        double dis;
        scanf("%d",&T);
        while(T--)
        {
            j=0;tong=0;
            memset(a,0,sizeof(a));
            memset(v,0,sizeof(v));
            scanf("%d%d%d",&n,&h,&r);
            for(i=1;i<=n;i++)
            {
                scanf("%d%d%d",&x[i],&y[i],&z[i]);
                if(z[i]-r<=0){j++;a[j]=i;v[i]=1;}
            }
            for(i=1;i<=j;i++)
            {
                if(z[a[i]]+r>=h){tong=1;break;}
                for(k=1;k<=n;k++)
                {
                    if(v[k]==1)continue;
                    dis=sqrt((x[a[i]]-x[k])*(x[a[i]]-x[k])+(y[a[i]]-y[k])*(y[a[i]]-y[k])+(z[a[i]]-z[k])*(z[a[i]]-z[k]));
                    if(dis<=2*r){j++;a[j]=k;v[k]=1;}                
                }
            }
            if(tong==1)printf("Yes
    ");
            else       printf("No
    ");
        }
        return 0;
    }
  • 相关阅读:
    note
    deep learning
    matlab远程调试
    faster rcnn
    十一旅行
    python生成随机数
    python 读取mat文件
    opencv anaconda
    python文件操作
    python换行
  • 原文地址:https://www.cnblogs.com/wisdom-jie/p/13773779.html
Copyright © 2011-2022 走看看