l3-004 腫瘤診斷
在診斷腫瘤疾病時,計算腫瘤體積是很重要的一環。給定病灶掃瞄切片中標註出的疑似腫瘤區域,請你計算腫瘤的體積。
輸入格式:
輸入第一行給出4個正整數:m、n、l、t,其中m和n是每張切片的尺寸(即每張切片是乙個m×n的畫素矩陣。最大解析度是1286×128);l(<=60)是切片的張數;t是乙個整數閾值(若疑似腫瘤的連通體體積小於t,則該小塊忽略不計)。
最後給出l張切片。每張用乙個由0和1組成的m×n的矩陣表示,其中1表示疑似腫瘤的畫素,0表示正常畫素。由於切片厚度可以認為是乙個常數,於是我們只要數連通體中1的個數就可以得到體積了。麻煩的是,可能存在多個腫瘤,這時我們只統計那些體積不小於t的。兩個畫素被認為是「連通的」,如果它們有乙個共同的切面,如下圖所示,所有6個紅色的畫素都與藍色的畫素連通。
\ figure 1
輸出格式:
在一行中輸出腫瘤的總體積。
輸入樣例:
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
輸出樣例:
解題思路:
**實現起來好複雜,就參考了演算法筆記。
三維的bfs,用adj儲存,vis]標記是否已訪問,用結構體陣列表示三維空間中的點的三維座標。用x,y,z陣列記錄在各個方向上的移動的增量,另需judge函式判斷是否訪問到邊界、點不存在或者已訪問。bfs的套路和二維的相似。
#include
#include
#include
using
namespace
std;
int n,m,l,t;
struct nodenode;
int adj[1300][140][70];
bool vis[1300][140][70]=;
int x[6]=;
int y[6]=;
int z[6]=;
bool judge(int x,int y,int z)
int bfs(int x,int y,int z)}}
if(tot>=t) return tot;
else
return0;}
int main()}}
int ans=0;
for(int z=0;zfor(int x=0;xfor(int y=0;yif(adj[x][y][z]==1&&vis[x][y][z]==false)}}
}printf("%d\n",ans);
return
0;}
L3 004 腫瘤診斷
在診斷腫瘤疾病時,計算腫瘤體積是很重要的一環。給定病灶掃瞄切片中標註出的疑似腫瘤區域,請你計算腫瘤的體積。輸入格式 輸入第一行給出4個正整數 m n l t,其中m和n是每張切片的尺寸 即每張切片是乙個m n的畫素矩陣。最大解析度是1286 128 l 60 是切片的張數 t是乙個整數閾值 若疑似腫...
L3 004 腫瘤診斷
在診斷腫瘤疾病時,計算腫瘤體積是很重要的一環。給定病灶掃瞄切片中標註出的疑似腫瘤區域,請你計算腫瘤的體積。輸入格式 輸入第一行給出4個正整數 m n l t,其中m和n是每張切片的尺寸 即每張切片是乙個m n的畫素矩陣。最大解析度是1286 128 l 60 是切片的張數 t是乙個整數閾值 若疑似腫...
L3 004 腫瘤診斷
時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 在診斷腫瘤疾病時,計算腫瘤體積是很重要的一環。給定病灶掃瞄切片中標註出的疑似腫瘤區域,請你計算腫瘤的體積。輸入格式 輸入第一行給出4個正整數 m n l t,其中m和n是每張切片的尺...