题目:岛屿数量
给你一个由 ‘1’(陆地)和 ‘0’(水)组成的的二维网格,请你计算网格中岛屿的数量。
岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。
此外,你可以假设该网格的四条边均被水包围。
作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/queue-stack/kbcqv/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
Sovle:
> for (int i = 0; i < grid.GetLength(0); i++)
> {
> for (int j = 0; j < grid[i].Length; j++)
> {
> if (temp[i][j]=='1')
> {
> count++;
> Search(i, j);
> }
> }
> }
> void Search(int a, int b)
> {
> left(a, b);
> right(a, b);
> up(a, b);
> down(a, b);
> }
> void left(int m, int n)
> {
> int j = n - 1;
> if (j < 0)
> {
> return;
> }
> if (grid[m][j] == '1'&&temp[m][j]=='1')
> {
> temp[m][j] = '0';
> Search(m, j);
> }
> return;
> }
> //2020.12.15上面的代码,Search()、left()可以合并精简
> //合并完之后:
> public int NumIslands(char[][] grid)
> {
> int count = 0;
> for (int i = 0; i < grid.GetLength(0); i++)
> {
> for (int j = 0; j < grid[i].Length; j++)
> {
> if (grid[i][j] == '1')
> {
> count++;
> Search(i, j);
> }
> }
> }
> return count;
> void Search(int r,int c)
> {
> if (!inarea(r,c))
> {
> return;
> }
> if (grid[r][c]!='1')
> {
> return;
> }
> grid[r][c] = '2';//如果是1,标记为已遍历
> //下面开始上下左右深度搜索
> Search(r - 1, c);
> Search(r + 1, c);
> Search(r, c - 1);
> Search(r, c + 1);
> }
> bool inarea(int r,int c)
> {
> if (r>=0&&r< grid.GetLength(0)&&c>=0&&c<grid[r].Length)
> {
> return true;
> }
> return false;
> }
>
> }