LeetCode 200 BFS 超时
来源:8-7 floodfill算法,一类经典问题 Number of Islands-

慕运维9331189
2020-08-11
class Solution {
public:
vector<vector<int>> visited;
vector<vector<int>> d{ {-1, 0}, {0, 1}, {1, 0}, {0, -1} };
int m; // 行数
int n; // 列数
int numIslands(vector<vector<char>>& grid) {
int result = 0;
if (grid.size() == 0) {
return result;
}
m = grid.size();
n = grid[0].size();
visited = vector<vector<int>>(grid.size(), vector<int>(grid[0].size(), 0));
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
if (grid[i][j] == '1' && visited[i][j] == 0) {
backtrack(grid, i, j);
result += 1;
}
}
}
return result;
}
void backtrack(vector<vector<char>> grid, int row, int column) {
for (int i = 0; i < 4; i++) {
int new_row = row + d[i][0];
int new_column = column + d[i][1];
if (new_row >= 0 && new_row < m && new_column >= 0 && new_column < n &&
grid[new_row][new_column] == '1' && visited[new_row][new_column] == 0) {
visited[new_row][new_column] = 1;
backtrack(grid, new_row, new_column);
}
}
return;
}
};
老师,这个题我提交之后最后一个测试用例显示是超时,我改了几次还是不行。老师帮看一下问题到底出在哪了。。。。我实在看不出问题
多谢bobo老师了
写回答
1回答
-
grid 需要引用传值,不然每次调用 backtrack,grid 都要被复制一次:
void backtrack(vector<vector<char>>& grid, int row, int column)
继续加油!:)
012020-08-12
相似问题