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

    又回到了这道充满回忆的题目,复出重学算法。

    解决本题的算法:

     ·深度优先搜索(DFS)

       ·广度优先搜索(BFS)

       ·并查集

    本篇将介绍深搜做法。

     

       题解

      首先,找出所有可以从下表面进入的球,然后进行dfs,如果遇到点的高度z[i]+r>=h,说明跑到上表面,返回。每个点最多访问一次。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    using namespace std;
    bool v[1005],tong;
    long long x[1005],y[1005],z[1005];
    int a[1005],n,h,r;
    void dfs(int d)
    {
        v[d]=1;
        if(z[d]+r>=h){tong=1;return;}
        double dis;
        int next;
        for(int i=1;i<=n;i++)
        {
            if(v[i]==1)continue;
            dis=sqrt((x[d]-x[i])*(x[d]-x[i])+(y[d]-y[i])*(y[d]-y[i])+(z[d]-z[i])*(z[d]-z[i]));
            if(dis<=2*r)
                dfs(i);
        }
    }
    int main()
    {
        int T,j;
        scanf("%d",&T);
        while(T--)
        {
            memset(a,0,sizeof(a));
            memset(v,0,sizeof(v));
            tong=0;
            scanf("%d%d%d",&n,&h,&r);
            j=0;
            for(int 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(int i=1;i<=j;i++)
            {
                dfs(a[i]);
                if(tong==1)break;
            }
            if(tong==1)printf("Yes
    ");
            else       printf("No
    ");
        }
        return 0;
    } 
  • 相关阅读:
    jQuery工具函数
    jqXHR对象
    跨域获取
    Ajax :六个全局事件
    表单序列化
    Ajax : $. get()和$.post() $.getScript $.getJSON
    Ajax : load()
    列队动画
    关于MindManager显示不同级别的控制
    Mybatis 查询传多个参数(3中方法)
  • 原文地址:https://www.cnblogs.com/wisdom-jie/p/13773711.html
Copyright © 2011-2022 走看看