岛屿数量 200 DFS

题目:

给定'1's(土地)和'0's(水)的2d网格图,计算岛屿的数量。
岛被水包围,通过水平或垂直连接相邻的土地而形成。您可以假设网格的所有四个边都被水包围。

分析:

//截至条件:如何判定这是一个岛屿grid[i+1][j] == 0 && grid[i][j+1] == 0的时候
//确定这是一个岛屿,此时在存储岛屿数量的变量上加1

Code:

int numIslands(vector<vector<char>>&grid)
{
	int conCount = 0;
	for (int i = 0;i<grid.size();i++)
	{
		for (int j = 0;j>grid[0].size();j++)
		{
			if (grid[i][j] == '1')
			{
				conCount = dfs(grid, i, j);
			}
		}
	}

	return conCount;
}

int dfs(vector<vector<char>>&grid,int i,int j)
{
	if (i < 0 || i >grid.size()||j<0||j>grid[0].size()||grid[i][j] == '0')
	{
		return 0;
	}

	int areaCount = 0;
	grid[i][j] = '0';
	
	if (grid[i+1][j] == '0' && grid[i][j+1] == '0' && grid[i+1][j+1] == '1')
	{
		areaCount++;
	}

	return dfs(grid, i, j - 1) + dfs(grid, i - 1, j) + dfs(grid, i, j + 1) + dfs(grid, i + 1, j);
}

  //现在的情况是输出0;

//也就是在案例中没有出现

grid[i+1][j] == '0' && grid[i][j+1] == '0' && grid[i+1][j+1] == '1'的情况

转载于:https://www.cnblogs.com/jihuabai/p/9925921.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值