我正在尝试解决以下问题:给定一个由0和1组成的网格,找出其中“岛屿”的数量,其中“岛屿”是指由上下左右移动可达到的一片连续的1区域。
下面给出的代码的时间复杂度是多少?我认为应该是O(rcn),其中n是最大岛屿的大小。然而,在Geeks for Geeks上,他们说时间复杂度是O(V+E)。
下面给出的代码的时间复杂度是多少?我认为应该是O(rcn),其中n是最大岛屿的大小。然而,在Geeks for Geeks上,他们说时间复杂度是O(V+E)。
void bfs(int r, int c, vector < vector < char >> & grid) {
queue < pair < int, int >> q;
int row[4] = {-1,0,1,0};
int col[4] = {0,1,0,-1};
q.push(make_pair(r, c));
while (!q.empty()) {
pair < int, int > p = q.front();
int x = p.first;
int y = p.second;
q.pop();
for (int i = 0; i < 4; i++) {
if (x + row[i] < grid.size() && y + col[i] < grid[0].size() && x + row[i] >= 0 && y + col[i] >= 0 && grid[x + row[i]][y + col[i]] == '1') {
q.push(make_pair(x + row[i], y + col[i]));
grid[x + row[i]][y + col[i]] = '0';
}
}
}
}
int numIslands(vector < vector < char >> & grid) {
int count = 0;
int r = grid.size();
if (r == 0)
return count;
int c = grid[0].size();
for (int i = 0; i < r; i++) {
for (int j = 0; j < c; j++) {
if (grid[i][j] == '1') {
bfs(i, j, grid);
count++;
}
}
}
return count;
}