注意点:
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