韩
2025-10-31 20:00:11
发布于:北京
#include <bits/stdc++.h>
using namespace std;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
struct ddw {
int x, y;
};
int n, m;
int mp[105][105];
//把 (x,y) 能够到达的点全改成 0
void bfs(int x, int y) {
queue<ddw> q;
//起点入队
q.push({x, y});
while (!q.empty()) {
//取队首并出队
ddw a = q.front();
q.pop();
mp[a.x][a.y] = 0;
for (int i = 0; i < 4; i++) {
int xx = a.x + dx[i];
int yy = a.y + dy[i];
if (xx >= 1 && xx <= n && yy >= 1 && yy <= m && mp[xx][yy] == 1) {
q.push({xx, yy});
}
}
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
cin >> mp[i][j];
}
}
int cnt = 0;//岛屿计数器
//逐行逐列遍历每一个点
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
//如果当前点是一个陆地,说明发现了新大陆(新岛屿)
if (mp[i][j] == 1) {
//岛屿++
cnt++;
//把岛屿沉了 (通过广搜实现)
bfs(i, j);
}
}
}
cout << cnt;
return 0;
}
全部评论 1
23小时前 来自 北京
0














有帮助,赞一个