```cpp
#include <iostream>
using namespace std;
int Map[105][105], n, m, sum, flag[105][105];
int X[5] = { 0,-1,0,1,0 };
int Y[5] = { 0,0,-1,0,1 };
void init() {
cin >> n >> m;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
cin >> Map[i][j];
return;
}
void dfs(int x, int y, int block) {
flag[x][y] = 1;
for (int i = 1; i <= 4; i++) {
int x2 = x + X[i];
int y2 = y + Y[i];
if (x2 >= 1 && x2 <= n && y2 >= 1 && y2 <= m && flag[x2][y2] == 1 && Map[x2][y2] != '0')
dfs(x2, y2, block);
}
return;
}
int main() {
init();
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++) {
if (Map[i][j] != '0' && flag[i][j] == 0) {
dfs(i, j, ++sum);
}
}
cout << sum;
return 0;
}
```