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 ...
随机推荐
- 一个App与另一个App之间的交互,添加了自己的一些理解
URL Scheme 是什么? iOS有个特性就是应用将其自身"绑定"到一个自定义 URL scheme 上,该 scheme用于从浏览器或其他应用中启动本应用.常见的分享到第三方 ...
- Android系统修改硬件设备访问权限
Android系统修改硬件设备访问权限 在硬件抽象层模块文件(so)文件中,提供的函数调用open函数来打开设备文件,比如/dev/gpio,如果不修改设备文件/dev/gpio的访问权限,那么应用程 ...
- Java-ServletContextAttributeListener
/** Implementations of this interface receive notifications of ** changes to the attribute list on t ...
- 操作系统 - unix和windows下进程异同
在UNIX系统中,只有一个系统调用可以用来创建新进程:fork.这个系统调用会创建一个与调用进程相同的副本.在调用了fork之后,这两个进程(父进程和子进程)拥有相同的存储映像.同样的环境字符串和同样 ...
- Oracle统一访问代理层方案
目标 提供一个oracle数据库统一访问代理层,统一管理所有oracle数据库用户名的连接池,让多个应用系统相同的数据库用户公用连接池以节省oracle服务器的总连接数,并且提供统一管理oracle能 ...
- LeetCode之“字符串”:Valid Number(由此引发的对正则表达式的学习)
题目链接 题目要求: Validate if a given string is numeric. Some examples: "0" => true " 0.1 ...
- XMPP系列(三)---获取好友列表、添加好友
1.心跳检测.掉线重连功能 客户端和服务器端都可以设置多久发送一次心跳包,如果对方没有返回正确的pong信息,则会断开连接,而添加掉线重连功能,则会自动进行连接. 如果自己写聊天功能还得自己做心跳检测 ...
- The 11th tip of DB Query Analyzer
The 11th tip of DB Query Analyzer MA Gen feng ...
- C标准中关于空指针的那些事
1 C标准不保证用所有二进制位都为0的变量来表示空指针,但它保证空指针与任何对象或函数的指针都不相等,取地址操作符&永远也不会返回空指针: 2 C标准称在指针上下文中的"值为0的整形 ...
- windows下ruby中显示中文的3种方法
A: 1将x.rb编码为ascii格式 2 在x.rb开头加上 #code:gbk或者 #coding:gbk B: 1 将x.rb编码为utf-8格式 2 在x.rb开头加上 #code:utf-8 ...