閉合區域面積統計(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 #include8using
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,表示是按...