閉合區域面積統計

2022-05-09 15:31:49 字數 1432 閱讀 7233

閉合區域面積統計(area)

題目描述

程式設計計算由『*』號圍成的下列圖形的面積。面積的計算方法是統計*號所圍成的閉合曲線中水平線和垂直線交點的數目。如圖所示,在10*10 的二維陣列中,有*圍住了15 個點,因此面積為15。

輸入乙個10*10 的二維陣列, 裡面的數為0 和1,1 代表著*號。

輸出乙個整數, 被圍住的點。

樣例輸入

0 0 0 0 0 0 0 0 0 0

0 0 0 0 1 1 1 0 0 0

0 0 0 0 1 0 0 1 0 0

0 0 0 0 0 1 0 0 1 0

0 0 1 0 0 0 1 0 1 0

0 1 0 1 0 1 0 0 1 0

0 1 0 0 1 1 0 1 1 0

0 0 1 0 0 0 0 1 0 0

0 0 0 1 1 1 1 1 0 0

0 0 0 0 0 0 0 0 0 0

樣例輸出

15一道bfs水題,不過還是要有一點小技巧

首先,找的是不被圍住的點,然後統計一下除了這些點和值為1的點,用總數減去即可。

bfs找圈外的點需要注意的是不能只從左上角開始找,有也不能只從四個角開始找,因為這四個點都可能是1,所以最完善的做法是從最外面的一周的點開始bfs,因為若這些點都是1的話,那麼被圍住的點就是整個圖形了。

這個演算法別看要多次bfs,但因為被標記的點就不會再走,所以複雜度和乙個點bfs是一樣的。

另一種做法就是在整個圖形外面再圍一圈0,然後從左上角bfs 。

1 #include2 #include3 #include4 #include5 #include6 #include7 #include8

using

namespace

std;

9 typedef long

long

ll;10

const

int maxn = 15;11

int a[maxn][maxn], ans = 0;12

int dx[5] = , dy[5] = ;

13void bfs(int x, int

y)1428}

29x.pop(); y.pop();30}

3132}33

intmain()

3446

for(int i = 1; i <= 10; ++i)

47for(int j = 1; j <= 10; ++j)

48if(!a[i][j]) ans++;

49 printf("

%d\n

", ans);

50return0;

51 }

閉合區域面積統計 題解

題目描述 程式設計計算由 號圍成的下列圖形的面積。面積的計算方法是統計 號所圍成 的閉合曲線中水平線和垂直線交點的數目。如圖所示,在10 10 的二維陣列中,有 圍住了15 個點,因此面積為15。0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ...

matlab去除大面積連通區域

在利用進行影象形態學處理的時候,經常需要去除面積較大或面積較小的連通區域。對於去除面積較小的連通區域,matlab提供了現有的函式 bw2 bwareaopen bw,p,conn 刪除二值影象bw中面積小於p的物件,預設情況下conn使用8鄰域可是matlab並沒有去除面積較大連通區域的函式,當然...

bwlabel函式 統計連通區域 MATLAB

matlab bwlabel函式 統計連通區域 使用dfs計算連通區域個數 4連通域邊界填充演算法和8連通域邊界填充演算法c l bwlabel bw,n 返回乙個和bw大小相同的l矩陣,包含了標記了bw中每個連通區域的類別標籤,這些標籤的值為1 2 num 連通區域的個數 n的值為4或8,表示是按...