一维数组与二维数组的转化 + DFS
C++代码
#include<iostream>
using namespace std;
const int N = 1e6 + 15;
int n, m;
int a[N];
bool used[N];
int dx[8] = {-1, -1, -1, 0, 0, 1, 1, 1};
int dy[8] = {-1, 0, 1, -1, 1, -1, 0, 1};
void DFS(int x, int y) {
for(int i = 0; i < 8; i++) {
int x1 = x + dx[i];
int y1 = y + dy[i];
if(x1 >= 0 && x1 < n && y1 >= 0 && y1 < m) {
int k = x1 * m + y1;
if(!used[k] && a[k] == 1) {
used[k] = true;
DFS(x1, y1);
}
}
}
return ;
}
int block() {
int ans = 0;
for(int i = 0; i < n * m; i++) {
if(!used[i] && a[i] == 1) {
ans++;
used[i] = true;
int x = i / m;
int y = i - x * m;
DFS(x, y);
}
}
return ans;
}
int main() {
cin >> n >> m;
for(int i = 0; i < n * m; i++) cin >> a[i];
cout << block() << endl;
return 0;
}