正经题解|细胞
2024-03-22 11:17:20
发布于:浙江
144阅读
0回复
0点赞
【算法分析】
实际上就是求连通块的个数。
【参考代码】
#include <bits/stdc++.h>
using namespace std;
char MAP[1009][1009];
bool vis[1009][1009];
int n, m;
int dir[4][2] = { -1,0,0,1,1,0,0,-1 };
struct node {
int x, y;
}l,r;
void bfs(int x, int y) {
queue<node> q;
q.push({ x,y });
vis[x][y] = 1;
while (q.size()) {
r = q.front();
q.pop();
for (int i = 0; i < 4; i++) {
l.x = r.x + dir[i][0];
l.y = r.y + dir[i][1];
if (l.x >= 1 && l.x <= n && l.y >= 1 && l.y <= m && !vis[l.x][l.y] && MAP[l.x][l.y] >= '1' && MAP[l.x][l.y] <= '9') {
vis[l.x][l.y] = 1;
q.push(l);
}
}
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> MAP[i] + 1;
}
int number = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (!vis[i][j] && (MAP[i][j] >= '1' && MAP[i][j] <= '9')) {
number++;
bfs(i, j);
}
}
}
cout << number;
return 0;
}
【时间复杂度】
【预计得分】
这里空空如也
有帮助,赞一个