FOJ 1063 三维扫描 // DFS

来源:互联网 发布:redis 数据库设计实例 编辑:程序博客网 时间:2024/05/17 08:26

题目描述

Problem 1063 三维扫描

解题思路

简单DFS

参考代码

#include <stdio.h>#include <string.h>#include <math.h>const int inf = 0x3f3f3f3f;const int maxn = 55;int map[maxn][maxn][maxn];int dir[6][3]={{1,0,0},{-1,0,0},{0,1,0},{0,-1,0},{0,0,1},{0,0,-1}};//前后左右上下6个方向int l,w,h,m;void dfs (int x,int y,int z){    int temp = map[x][y][z];    map[x][y][z] = inf;    for (int i = 0;i < 6;i++){        int nx = x+dir[i][0],ny = y+dir[i][1],nz = z+dir[i][2];        if (map[nx][ny][nz] != inf && fabs(map[nx][ny][nz]-temp) <= m)            dfs(nx,ny,nz);    }}int main(){    while (~scanf("%d %d %d",&l,&w,&h)){        memset(map,inf,sizeof(map));        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",&map[i][j][k]);        int ans = 0;        for (int i = 1;i <= l;i++)            for (int j = 1;j <= w;j++)                for (int k = 1;k <= h;k++)                    if (map[i][j][k] != inf){                        ans++;                        dfs(i,j,k);                    }           printf("%d\n",ans);    }    return 0;}
0 0