8.孤岛的总面积

思路:

一开始的想法是在遍历途中打标记flg标记孤岛。但是那样可能标记起来有点麻烦

就应该还是选择把不是孤岛的部分变成海洋。从边缘开始搜索。

之后直接对中心区域计算即可。中心区域不用再搜索。

储备:

代码随想录

问题重点:

最后:

深搜版:

#include
using namespace std;

int d[4][2]={1,0,
			0,1,
			-1,0,
			0,-1};
//不是要把整个岛搜出来,而是要陆地变海洋。所以不用vst数组 
void dfs(vector>& g,int x,int y) {
	g[x][y]=0;//陆地变海洋。同时把相连的陆地都变成海洋。 
	for (int i=0;i<4;i++) {
		int nx=x+d[i][0];
		int ny=y+d[i][1];
		if (nx<0 || nx>=g.size() || ny<0 || ny>=g[0].size()) continue;
		if (g[nx][ny]==0) continue; //一味跳过即可。 
		dfs(g,nx,ny);
	}
	return ;
}

int main()
{
	int n,m;
	cin>>n>>m;
	vector> g(n+1,vector(m+1,0));
	for (int i=0;i>g[i][j];
		}
	}
	
	for (int i=0;i

广搜版:

#include
using namespace std;

int d[4][2]={1,0,
			0,1,
			-1,0,
			0,-1};
			
//不是要把整个岛搜出来,而是要陆地变海洋。所以不用vst数组 
void bfs(vector>& g,int x,int y) {
	g[x][y]=0;
	queue> que;
	que.push({x,y});
	g[x][y]=0;//陆地变海洋。同时把相连的陆地都变成海洋。 
	while (!que.empty()) {
		pair cur=que.front();
		que.pop();
		int cx=cur.first;
		int cy=cur.second;
		for (int i=0;i<4;i++) {
			int nx=cx+d[i][0];
			int ny=cy+d[i][1];
			if (nx<0 || nx>=g.size() || ny<0 || ny>=g[0].size()) continue;
			if (g[nx][ny]==0) continue;
			g[nx][ny]=0;
			que.push({nx,ny}); //陆地变海洋即可。所以直接往下搜索即可 
		}
	}
	return ;
}

int main()
{
	int n,m;
	cin>>n>>m;
	vector> g(n+1,vector(m+1,0));
	for (int i=0;i>g[i][j];
		}
	}
	
	for (int i=0;i

 

你可能感兴趣的:(刷代码随想录,图,深度优先,算法,图论,leetcode,职场和发展,数据结构)