十四届蓝桥杯 F题岛屿个数

文章讲述了如何处理字符输入的01串来计算岛屿数量,强调了BFS和DFS算法的应用,以及如何通过手动添加外海来判断岛屿是否为环内岛屿。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意点:

1.怪不得这么多佬都喜欢用字符读01,因为int读得处理一下

当输入是010111串时,用int读,只算一个int

解决方法:scanf("%1d",...),只读入一个整数

2.bfs时,记得每输入一个图,将标记置为false

memset(u,0,sizeof u);  //#include<cstring>

分析

1.不加条件“不包括环内岛屿”,则是经典的求岛屿数量题目,直接dfs or bfs

2.加了条件,本题在按经典求解方法求出后,还需要判断是否是子岛屿

3.如何判断:

在输入图之前,手动增加一圈外海,从外海开始遍历图,那么该岛屿一定不是环内岛屿

BFS求解

从起点开始找:

(1)是海,入队,标记

(2)不是海,标记为岛屿,岛屿数量+1

bfs一般用队列实现

1.经典求岛屿个数代码

void bfs_island(int x,int y) //从起点开始
{
	queue<PII> q;
	q.push({x,y});  //入队
	u[x][y] = true;  //标记已访问
	while(!q.empty())  //队不为空
	{
		PII p = q.front();  //取队首
		q.pop();  //弹出队首
		for(int i = 0;i < 4;i ++)  //遍历上下左右,是否能组成一个岛
		{
			int a 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值