ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

【力扣分模块联系】DFS与BFS

2020-12-14 20:30:54  阅读:194  来源: 互联网

标签:return int 扣分 DFS BFS grid && maxnum size


695. 岛屿的最大面积 深度优先,返回int

题意:给定一个包含了一些 0 和 1 的非空二维数组 grid 。
一个 岛屿 是由一些相邻的 1 (代表土地) 构成的组合,这里的「相邻」要求两个 1 必须在水平或者竖直方向上相邻。你可以假设 grid 的四个边缘都被 0(代表水)包围着。
找到给定的二维数组中最大的岛屿面积。(如果没有岛屿,则返回面积为 0 。)
如:
输入:
[[0,0,1,0,0,0,0,1,0,0,0,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,1,1,0,1,0,0,0,0,0,0,0,0],
[0,1,0,0,1,1,0,0,1,0,1,0,0],
[0,1,0,0,1,1,0,0,1,1,1,0,0],
[0,0,0,0,0,0,0,0,0,0,1,0,0],
[0,0,0,0,0,0,0,1,1,1,0,0,0],
[0,0,0,0,0,0,0,1,1,0,0,0,0]]

输出:
6

传统的dfs在Pta考试中已经练得很熟练了,这里梳理了一遍做法
1.利用一个数组 {-1,0,1,0,-1} 通过i 和i + 1的控制,可以完美表示出上下左右四个方向行与列坐标的变化。
2.递归有两种写法,
一种是不管三七二十一,直接调用下一层递归,然后再到下一步搜索的开始时(第一行)进行判断是否合法。
第二种是先判断是否越界,再决定是否要调用下一层。(个人比较熟悉这个第二种)

注意本题需要在遍历到某个点grid【i】【j】后,把这个点变为0,以免在主函数中的循环遍历中,重复计算这个点。

class Solution {
public:
	int dirac[5] = { -1,0,1,0,-1 };

	int maxAreaOfIsland(vector<vector<int>>& grid) {
		if (grid.empty() && grid[0].empty())
			return 0;

		int maxnum = 0;
		for (int i = 0; i < grid.size(); i++)
		{
			for (int j = 0; j < grid[0].size(); j++)
			{
				if (grid[i][j] == 1)
				{
					int ans = dfs(grid, i, j);
					if (ans > maxnum)
						maxnum = ans;
				}
			}
		}
        return maxnum;
	}
private:
	int dfs(vector<vector<int>>& grid, int r, int c)
	{
		if (grid[r][c] == 0)
			return 0;
		grid[r][c] = 0; //遍历到之后改变原图,避免重复遍历

		int x, y, area = 1;
		for (int i = 0; i < 4; i++)
		{
			x = r + dirac[i];
			y = c + dirac[i + 1];  //四个方向

			if (x >= 0 && x < grid.size() && y >= 0 && y < grid[0].size())
				area += dfs(grid, x, y);
		}
		return area;
	}
};

标签:return,int,扣分,DFS,BFS,grid,&&,maxnum,size
来源: https://blog.csdn.net/abyss_miracle/article/details/111184737

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有