zoukankan      html  css  js  c++  java
  • 【dfs模板】dfs找联通块分区

    题目描述

    天文学家Doctor博士发明了一种太空分区方法,在这个方法中,宇宙里亮度相近的区域被划为同一个星区。空间中相邻两区域若亮度差不大于给定整数M,则这两区域属于同一星区。现给你一个空间的三维坐标图,每个坐标整点表示一个区域,其值表示其亮度,而其上、下、左、右、前、后六个区域被认为是与其相邻的。请你计算一下该空间内的星区数量。

    输入

    第一行三个正整数x、y、z(x、y、z<=50),表示空间的长宽高。
    第二行一个整数M。
    接下来为一行,x*y*z个0~255的整数,按照空间坐标大小的顺序由小到大依次给出每个区域的亮度。
    说明:对于空间两点p1(x1,y1,z1)和p2(x2,y2,z2),p1<p2当且仅当(x1<x2)或者(x1=x2且y1<y2)或者(x1=x2且y1=y2且z1<z2)。

    输出

    一个整数,空间中的星区数量。
     
    #include <bits/stdc++.h>
    #define ll long long
    using namespace std;
    int num[55][55][55];
    bool mp[55][55][55];
    int d;
    int n,m,h;
    int dx[]={0,0,-1,1,0,0};
    int dy[]={1,-1,0,0,0,0};
    int dz[]={0,0,0,0,1,-1};
    bool check(int x,int y,int z)
    {
        if(x<1||x>n||y<1||y>m||z<1||z>h)
            return 1;
        if(mp[x][y][z])
            return 1;
        return 0;
    }
    void dfs(int x,int y,int z,int p){
        mp[x][y][z]=true;
        for(int i=0; i<6; ++i){
            int next_x=x+dx[i];
            int next_y=y+dy[i];
            int next_z=z+dz[i];
            if(next_x>=1&&next_x<=n&&next_y>=1&&next_y<=m&&next_z>=1&&next_z<=h&&!mp[next_x][next_y][next_z]&&abs(num[next_x][next_y][next_z]-p)<=d)
            {
                dfs(next_x,next_y,next_z,num[next_x][next_y][next_z]);
            }
        }
    }
    int main(){
       scanf("%d%d%d%d",&n,&m,&h,&d);
        for(int i=1;i<=n;++i){
            for(int j=1;j<=m;++j){
                for(int k=1;k<=h;++k){
                    scanf("%d",&num[i][j][k]);
                }
            }
        }
        int ent=0;
        for(int i=1;i<=n;++i){
            for(int j=1;j<=m;++j){
                for(int k=1;k<=h;++k){
                    if(!mp[i][j][k]){
                        ent++;
                        dfs(i,j,k,num[i][j][k]);
                    }
                }
            }
        }
        printf("%d
    ",ent);
        return 0;
    }
  • 相关阅读:
    优化tomcat——jvm
    深入理解jvm
    Too many open files
    Ubuntu 18.04 chrome安装
    Ubuntu 对比度调节
    SSH 开启,安装
    Ubuntu的Gnome美化
    snap占用/dev/loop0-/dev/loop11占用100%
    C题——Halting Problem(补题)
    H:有趣的试剂(1317)
  • 原文地址:https://www.cnblogs.com/Diliiiii/p/10305774.html
Copyright © 2011-2022 走看看