• FZU 1063 三维扫描


    水题。DFS求连通块。

    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include <iomanip>
    #include<iostream>
    #include<algorithm>
    using namespace std;
    
    const int maxn=50+10;
    int f[maxn][maxn][maxn];
    int flag[maxn][maxn][maxn];
    int L,W,H;
    int M;
    int Block;
    
    int dir[6][3]={
        {0,0,1},
        {0,0,-1},
        {0,1,0},
        {0,-1,0},
        {1,0,0},
        {-1,0,0}
    };
    
    
    void read()
    {
        scanf("%d",&M);
        for(int i=1;i<=L;i++)
            for(int j=1;j<=W;j++)
                for(int k=1;k<=H;k++)
                    scanf("%d",&f[i][j][k]);
    }
    
    void init()
    {
        memset(flag,0,sizeof flag);
        Block=0;
    }
    
    bool P(int a,int b,int c)
    {
        if(a>=1&&a<=L)
        {
            if(b>=1&&b<=W)
            {
                if(c>=1&&c<=H)
                {
                    return 1;
                }
            }
        }
        return 0;
    }
    
    void dfs(int x,int y,int z)
    {
        flag[x][y][z]=Block;
    
        for(int i=0;i<6;i++)
        {
            int new_x=x+dir[i][0];
            int new_y=y+dir[i][1];
            int new_z=z+dir[i][2];
    
            int R=f[x][y][z];
            int F=f[new_x][new_y][new_z];
    
            if(P(new_x,new_y,new_z)&&flag[new_x][new_y][new_z]==0&&abs(R-F)<=M) 
                dfs(new_x,new_y,new_z);
        }
    }
    void work()
    {
        for(int i=1;i<=L;i++)
            for(int j=1;j<=W;j++)
                for(int k=1;k<=H;k++)
                {
                    if(flag[i][j][k]==0)
                    {
                        Block++;
                        dfs(i,j,k);
                    }
                }
        printf("%d
    ",Block);
    }
    
    int main()
    {
        while(~scanf("%d%d%d",&L,&W,&H))
        {
            read();
            init();
            work();
        }
        return 0;
    }
  • 相关阅读:
    水晶报表开发
    ASP.NET页面刷新方法总结
    DataList获取当前ID
    flexviewer让指定slid值对于的图层可见
    WKT
    消息的分类
    MFC画图
    MFC画文字DrawText,GetTextExtent,GetTextMetrics
    djvu是什么
    代码提示插件 Visual Assistxv
  • 原文地址:https://www.cnblogs.com/zufezzt/p/5289496.html
Copyright © 2020-2023  润新知