Accept: 415    Submit: 1291

Time Limit: 1000 mSec    Memory Limit : 32768 KB

 Problem Description

工业和医学上经常要用到一种诊断技术——核磁共振成像(Magnetic Resonance Imagers)。利用该技术可以对三维物体(例如大脑)进行扫描。扫描的结果用一个三维的数组来保存,数组的每一个元素表示空间的一个象素。数组的元素是0-255的整数,表示该象素的灰度。例如0表示该象素是黑色的,255表示该象素是白色的。



被扫描的物体往往是由若干个部件组合而成的。例如临床医学要对病变的器官进行检查,而器官是由一些不同的组织构成的。在实际问题中,同一个部件内部的色彩变化相对连续,而不同的部件的交界处色彩往往有突变。下面是一个简化的植物细胞的例子。


从细胞的平面图来看,该细胞大致是由四个“部件”构成的,细胞壁、细胞核、液泡和细胞质。为了方便起见,我们对部件的概念做如下的规定:

1.如果一个象素属于某部件,则或者该象素至少与该部件的一个象素相邻,或者该象素单独组成一个部件。(说明:每一个象素与前后、左右、上下的6个象素相邻)

2.同一个部件内部,相邻两个象素的灰度差不超过正整数M。M决定了程序识别部件的灵敏度。



你的任务是对于给定的物体,判断该物体是由几个部件组成的。

 Input

输入数据由多组数据组成。每组数据格式如下:

第一行是三个正整数L,W,H(L,W,H≤50),表示物体的长、宽、高。

第二行是一个整数M(0≤M≤255),表示识别部件的灵敏度。

接下来是L×W×H个0-255的非负整数,按照空间坐标从小到大的顺序依次给出每个象素的灰度。

说明:对于空间两点P1(x1,y1,z1)和P2(x2,y2,z2),P1<P2当且仅当
  (x1<x2)或者(x1=x2且y1<y2)或者(x1=x2且y1=y2且z1<z2)

 Output

对于每组数据,输出仅一行包含一个整数M,即一共识别出几个部件。

 Sample Input

2 2 201 1 1 1 2 2 2 2

 Sample Output

2

用dfs判断连通块,并扩展到三维

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <math.h>
#include <stdio.h>
#include <map>
#include <iomanip> using namespace std;
int l,w,h;
int m;
int a[55][55][55];
int vis[55][55][55];
int dir[6][3]={{0,0,1},{0,0,-1},{1,0,0},{-1,0,0},{0,1,0},{0,-1,0}};
int ans;
void dfs(int x,int y,int z)
{
for(int i=0;i<6;i++)
{
int xx=x+dir[i][0];
int yy=y+dir[i][1];
int zz=z+dir[i][2];
if(xx<1||xx>l||yy<1||yy>w||zz<1||zz>h)
continue;
if(vis[xx][yy][zz]||abs(a[xx][yy][zz]-a[x][y][z])>m)
continue;
vis[xx][yy][zz]=1;
dfs(xx,yy,zz);
}
}
int main()
{
while(scanf("%d%d%d",&l,&w,&h)!=EOF)
{
scanf("%d",&m);
ans=0;
for(int j=1;j<=l;j++)
{
for(int k=1;k<=w;k++)
{
for(int i=1;i<=h;i++)
{
scanf("%d",&a[j][k][i]);
}
}
}
memset(vis,0,sizeof(vis));
for(int i=1;i<=l;i++)
{
for(int j=1;j<=w;j++)
{
for(int k=1;k<=h;k++)
{
if(!vis[i][j][k])
{
vis[i][j][k]=1;
dfs(i,j,k);
ans++;
} }
}
} printf("%d\n",ans);
}
return 0;
}

FZU 1063 三维扫描(三维连通块)的更多相关文章

  1. FZU 1063 三维扫描

    水题.DFS求连通块. #include<cstdio> #include<cstring> #include<cmath> #include <iomani ...

  2. 图-用DFS求连通块- UVa 1103和用BFS求最短路-UVa816。

    这道题目甚长, 代码也是甚长, 但是思路却不是太难.然而有好多代码实现的细节, 确是十分的巧妙. 对代码阅读能力, 代码理解能力, 代码实现能力, 代码实现技巧, DFS方法都大有裨益, 敬请有兴趣者 ...

  3. 6_13古代象形符号(UVa1103)<图的连通块的应用>

    给出一幅黑白图像,每行相邻的四个点压缩成一个十六进制的字符.然后还有题中图示的6中古老的字符,按字母表顺序输出这些字符的标号. 输出说明:For each test case, display its ...

  4. DFS序+线段树 hihoCoder 1381 Little Y's Tree(树的连通块的直径和)

    题目链接 #1381 : Little Y's Tree 时间限制:24000ms 单点时限:4000ms 内存限制:512MB 描述 小Y有一棵n个节点的树,每条边都有正的边权. 小J有q个询问,每 ...

  5. UVA 572 油田连通块-并查集解决

    题意:8个方向如果能够连成一块就算是一个连通块,求一共有几个连通块. 分析:网上的题解一般都是dfs,但是今天发现并查集也可以解决,为了方便我自己理解大神的模板,便尝试解这道题目,没想到过了... # ...

  6. HD1269迷宫城堡(有向图 && 划分连通块)

    迷宫城堡 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  7. DFS(连通块) ZOJ 2743 Bubble Shooter

    题目传送门 题意:从炮台射出一个球,三个及以上颜色相同的会掉落,问最后会掉落多少个球 分析:先从炮台找一个连通块,然后与顶部连接的连通块都不会掉落,剩下的就是炮台射出后跟随掉落的. #include ...

  8. Codeforces Round #375 (Div. 2)——D. Lakes in Berland(DFS连通块)

    D. Lakes in Berland time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  9. UVa 572 油田(DFS求连通块)

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

随机推荐

  1. puppeteer 相关知识

    page.waitForNavigation: 但我们通过代码执行到页面跳转时,我们需要等待跳转完成再作其他事情.使用page.waitForNavigation会等待跳转完成.(一般作用在点击链接或 ...

  2. linux 配置apache、mysql、php ——20150807

    2015年8月7日 一部分:mysql mysql 5.5.40安装 第二部分:apache(apache要安装在php前面.apache和mysql可以随意顺序) 1. # tar zxvf htt ...

  3. 【Java】Java_10 常量与变量

    1.变量(variable) 1.1 我们通过变量来操纵存储空间中的数据,变量就是指代这个存储空间!空间位置是确定的,但是里面放置什么值不确定! 1.2 Java是一种强类型语言,每个变量都必须声明其 ...

  4. Oracle转化成为百分比

    两种方式都行: ),)||'%' 百分比 from dual; ),'99D99')||'%' 百分比 from dual 第一种方式通过round可以自己选择精确到位数.

  5. iOS项目中的网络请求和上下拉刷新封装

    代码地址如下:http://www.demodashi.com/demo/11621.html 一.运行效果图 现在的项目中不可避免的要使用到网络请求,而且几乎所有软件都有上下拉刷新功能,所以我在此对 ...

  6. 【c语言】不用大与小与号,求两数最大值

    // 不用大与小与号,求两数最大值 #include <stdio.h> int max(int a, int b) { int c = a - b; int d = 1 << ...

  7. ibatis-java.lang.RuntimeException: Error setting property 'setFileSize'

    ibatis查询问题:      ibatis-java.lang.RuntimeException: Error setting property 'setFileSize'

  8. mongoDB 高级查询之取模查询$mod

    http://hancang2000.i.sohu.com/blog/view/235140698.htm $mod取模运算   查询age取模10等于0的数据 db.student.find( { ...

  9. CoffeeScript 学习笔记

    1.什么叫 CoffeeScript CoffeeScript 是一种新的编程语言,构建于 JavaScript 之上.CoffeeScript 提供了一种简洁的语法,对 Python 或 Ruby ...

  10. Python技术公众号100天了

    公众号100天了,是个值得一提的日子! 我从2017年10月31日开始做这个公众号,到今天2018年2月7日,差不多100天时间 .虽然公众号很早就申请了,但直到去年10月31日,我才有真正把这个公众 ...