Given a 2d grid map of '1'
s (land) and '0'
s (water), count the number of islands. An island is surrounded by water and is formed by connecting adjacent lands horizontally or vertically. You may assume all four edges of the grid are all surrounded by water.
Example 1:
11110
11010
11000
00000
Answer: 1
Example 2:
11000
11000
00100
00011
Answer: 3
这道题,最开始我的dfs函数如下 :
void dfs(const vector<vector<char>> grid,bool** visited, int x, int y) {
int row = grid.size(), col = grid[0].size();
if (x < 0 || x >= row || y < 0 || y >= col)
return;
if (visited[x][y])
return;
if (grid[x][y] == '0')
return;
visited[x][y] = 1;
dfs(grid,visited,x+1,y);
dfs(grid,visited,x-1,y);
dfs(grid,visited,x,y+1);
dfs(grid,visited,x,y-1);
}
void dfs(const vector<vector<char>> &grid,bool** visited, int x, int y)
测试通过了。
如果不使用pass by reference 而是pass by value 的话,每次dfs,系统都要复制一个相同大小的矩阵grid,传给下一个递归函数。在极端数据的测试下,每次复制都会耗费相当多的时间,所以超时。