PAT1091:Acute Stroke
1091. Acute Stroke (30)
One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the results of image analysis in which the core regions are identified in each MRI slice, your job is to calculate the volume of the stroke core.
Input Specification:
Each input file contains one test case. For each case, the first line contains 4 positive integers: M, N, L and T, where M and N are the sizes of each slice (i.e. pixels of a slice are in an M by N matrix, and the maximum resolution is 1286 by 128); L (<=60) is the number of slices of a brain; and T is the integer threshold (i.e. if the volume of a connected core is less than T, then that core must not be counted).
Then L slices are given. Each slice is represented by an M by N matrix of 0's and 1's, where 1 represents a pixel of stroke, and 0 means normal. Since the thickness of a slice is a constant, we only have to count the number of 1's to obtain the volume. However, there might be several separated core regions in a brain, and only those with their volumes no less than T are counted. Two pixels are "connected" and hence belong to the same region if they share a common side, as shown by Figure 1 where all the 6 red pixels are connected to the blue one.
Figure 1
Output Specification:
For each case, output in a line the total volume of the stroke core.
Sample Input:
3 4 5 2
1 1 1 1
1 1 1 1
1 1 1 1
0 0 1 1
0 0 1 1
0 0 1 1
1 0 1 1
0 1 0 0
0 0 0 0
1 0 1 1
0 0 0 0
0 0 0 0
0 0 0 1
0 0 0 1
1 0 0 0
Sample Output:
26 思路 由题意,M行N列的矩阵表示一片脑部切图,矩阵中的值——0表示该位置一切正常,1表示该位置为肿瘤区,L表示脑部切图的片数,由此构建了一个M、N、L的三维的矩阵。
现在让你确定统计肿瘤区的个数,注意只有上下前后左右相邻的肿瘤区且这些相邻的区域个数必须不小于T才能被统计。
归根结底其实就是一个3D图的连通分量问题,即统计每一个节点数不小于T的连通分量的节点数之和。
用BFS或者DFS都行,这里用BFS更好,DFS递归可能会栈溢出。 代码
#include<iostream>
#include<queue>
using namespace std;
/*
坐标系如下
xxxxxxxxxxxxxxxxxx + →
z
z
z
z
z
z
z
+
↓
y轴垂直屏幕射出 */
class node
{
public:
int x,z,y;
node(int a,int b, int c){x = a;z = b;y = c;}
};
//6个方向分别为上下前后左右
int X[6] = {0,0,0,0,-1,1};
int Y[6] = {1,-1,0,0,0,0};
int Z[6] = {0,0,1,-1,0,0};
int graph[1290][130][65];
bool visit[1290][130][65];
int M,N,L,T; // z x y T bool check(int x,int z,int y)
{
if(x < 0 || z < 0 || y < 0 || x >= N || z >= M || y >= L)
return false;
if(graph[x][z][y] == 0 || visit[x][z][y])
return false;
return true;
} int bfs(int x,int z,int y)
{
int cnt = 0;
node tmp(x,z,y);
queue<node> q;
q.push(tmp);
visit[x][z][y] = true;
while(!q.empty())
{
node f = q.front();
q.pop();
cnt++;
for(int i = 0;i < 6;i++)
{
int newx = f.x + X[i];
int newz = f.z + Z[i];
int newy = f.y + Y[i];
if(check(newx,newz,newy))
{
visit[newx][newz][newy] = true;
tmp.x = newx;
tmp.y = newy;
tmp.z = newz;
q.push(tmp);
}
}
}
if(cnt >= T)
return cnt;
else
return 0;
} int main()
{
cin >> M >> N >> L >> T;
for(int y = 0;y < L;y++)
{
for(int z = 0; z < M;z++)
{
for(int x = 0;x < N;x++)
{
cin >> graph[x][z][y];
visit[x][z][y] = false;
}
}
}
int res = 0;
for(int y = 0;y < L;y++)
{
for(int z = 0; z < M;z++)
{
for(int x = 0;x < N;x++)
{
if(graph[x][z][y] == 1 && !visit[x][z][y])
res += bfs(x,z,y);
}
}
} cout << res << endl; }
PAT1091:Acute Stroke的更多相关文章
- pat1091. Acute Stroke (30)
1091. Acute Stroke (30) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue One impo ...
- 1091. Acute Stroke (30)
题目如下: One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given ...
- A1091. Acute Stroke
One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the re ...
- 【PAT】1091 Acute Stroke(30 分)
1091 Acute Stroke(30 分) One important factor to identify acute stroke (急性脑卒中) is the volume of the s ...
- PAT 1091 Acute Stroke [难][bfs]
1091 Acute Stroke (30 分) One important factor to identify acute stroke (急性脑卒中) is the volume of the ...
- 1091 Acute Stroke (30)(30 分)
One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the re ...
- PAT 1091. Acute Stroke (bfs)
One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the re ...
- PAT_A1091#Acute Stroke
Source: PAT A1091 Acute Stroke (30 分) Description: One important factor to identify acute stroke (急性 ...
- PAT甲级——A1091 Acute Stroke【30】
One important factor to identify acute stroke (急性脑卒中) is the volume of the stroke core. Given the re ...
随机推荐
- 关于post利用之Python
今天大师兄放出了自己用PHP写的KTV点歌系统,注明,欢迎调戏,于是乎就尝试了下. 地址就不上了,到现在没补漏洞,我可不想被大师兄K…… 首先试试JavaScript脚本能否恶搞下 来个最基础的警告框 ...
- Unity3D学习笔记(五)C#与JavaScript组件访问的比较
由于之前用JavaScript用的比较多,因此总是想用以前的方法来访问组件,却屡遭失败,经过查阅资料发现,二者存在较大的不同. 下面以调用3D Text组件HurtValue为例,来比较二者的不同 J ...
- Android主题切换—夜间/白天模式探究
现在市面上众多阅读类App都提供了两种主题:白天or夜间. 上述两幅图片,正是两款App的夜间模式效果,所以,依据这个功能,来看看切换主题到底是怎么实现的(当然现在github有好多PluginThe ...
- C++项目中的extern "C" {}(转)
注:本文转自吴秦先生的博客http://www.cnblogs.com/skynet/archive/2010/07/10/1774964.html#.吴秦先生的博客写的非常详细深刻容易理解,故特转载 ...
- Mahout SlopOne
关于推荐引擎 如今的互联网中,无论是电子商务还是社交网络,对数据挖掘的需求都越来越大了,而推荐引擎正是数据挖掘完美体现:通过分析用户历史行为,将他可能喜欢内容推送给他,能产生相当好的用户体验,这就是推 ...
- openresty+websocket+redis simple chat
openresty 很早就支持websocket了,但是早期的版本cosocket是单工的,处理起来比较麻烦参见邮件列表讨论 websocket chat,后来的版本cosocket是双全工的,就可以 ...
- C++笔记十七:C语言中 “冒牌货”const和const符号表
在.c文件中有程序: int main() { int const a = 10; a=20; printf("a=%d\n",a); return 0; } 编译就知道C语言 ...
- css选择器应用
.mynav li:not(:last-child) { margin-right: 20px; }
- SQL中内连接和外连接的问题!
本文系转载,版权归原作者所有. 如表 ------------------------------------------------- table1 | table2 | ...
- java并发包小结(二)
接上一篇 java并发包小结(一):http://blog.csdn.net/aalansehaiyang52/article/details/8877579 Future 接口Future 接口允许 ...