题目选自Leetcode 200. 岛屿数量

经典的搜索题,求岛屿数量

这里我用的是广度优先搜索BFS 最朴素的方法, 虽然效率不高,但是简单易懂

主要的问题在于:如何确定有多少个岛屿?

每次对一个“陆地”进行BFS,将其相连的“陆地”改变其访问状态:vis[i][j] = 1;

然后每次执行完一次BFS就成了一个岛屿!

然后我们继续遍历图,将剩余未被访问过 且 为“陆地”的 再进行BFS 同时将岛屿数量+1

if(grid[i][j] == '1' && vis[i][j] == 0){cnt++;bfs(i,j,n,m,grid);}

最终即可得到岛屿的数量~~~

 

解题代码:

class Solution {
public:int nt[4][2] = {{0,1},{1,0},{0,-1},{-1,0}}; //四个方向int vis[301][301] = {0};void bfs(int a,int b,int n,int m,vector<vector<char>>& grid){ //利用广度优先搜索将相连的标记为1queue<pair<int,int> > q;vis[a][b] = 1;q.push(make_pair(a,b));while(!q.empty()){int x = q.front().first;int y = q.front().second;int nx,ny;for(int i=0;i<4;i++){nx=x+nt[i][0]; ny=y+nt[i][1];if(nx>=0&&nx<n && ny>=0&&ny<m &&grid[nx][ny]=='1' && vis[nx][ny]!=1){//满足条件且没有被访问过,就加入队列并改变标记q.push(make_pair(nx,ny)); vis[nx][ny]=1;}}//四个方向都遍历结束就出队q.pop();}}int numIslands(vector<vector<char>>& grid) {int n = grid.size();     //获取行数int m = grid[0].size();    //获取列数int cnt = 0;for(int i = 0;i<n;i++){for(int j = 0;j<m;j++){if(grid[i][j] == '1' && vis[i][j] == 0){cnt++;bfs(i,j,n,m,grid);}}}return cnt;}
};

广度优先搜索——岛屿数量(Leetcode 200)相关推荐

  1. Leetcode 200. 岛屿数量 解题思路及C++实现

    解题思路: 典型的深度优先搜索问题,跟第130题 被围绕的区域 有点像,只不过这里不仅要找出被水包围的岛屿,还要计算这些岛屿的总数. 使用深度优先搜索的方法,大循环是遍历整个grid数组(两个for循 ...

  2. Leetcode 200.岛屿数量

    Time: 20190902 Type: Medium 题目描述 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地 ...

  3. 岛屿问题 通用解-463.岛屿周长-200.岛屿数量-695.岛屿的最大面积-827.最大人工岛

    文章目录 岛屿问题 如何在网格上做DFS(通用解) 463.岛屿的周长 题目 题解 -通用模板 题解2 200.岛屿数量 题目 题解 695.岛屿的最大面积 题目 题解 827.最大人工岛 题目 题解 ...

  4. 岛屿的个数java_LeetCode 200:岛屿数量 Number of Islands

    题目: 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. Given ...

  5. 【LeetCode 】试题总结:广度优先搜索(BFS)

    [LeetCode ]试题总结:广度优先搜索(BFS) 一.数据结构:二叉树中的 BFS (一).二叉树的堂兄弟节点 试题链接 解题思路 代码 (二).二叉树的层序遍历 II (三).二叉树的锯齿形层 ...

  6. [Leedcode][JAVA][第200题][岛屿数量][DFS][BFS][并查集]

    [问题描述] 第200题 岛屿数量 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量.岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成 ...

  7. C#LeetCode刷题-广度优先搜索

    广度优先搜索篇 # 题名 刷题 通过率 难度 101 对称二叉树 42.1% 简单 102 二叉树的层次遍历 49.7% 中等 103 二叉树的锯齿形层次遍历 43.0% 中等 107 二叉树的层次遍 ...

  8. LeetCode 岛屿数量

    给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量. 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成. 此外,你可以假设该网格的四条边 ...

  9. 200. Number of Islands**(岛屿数量)

    200. Number of Islands**(岛屿数量) https://leetcode.com/problems/number-of-islands/ 题目描述 Given an m x n ...

最新文章

  1. 猴子请来的逗比项目流水总结
  2. jvm内存模型及分配
  3. CORD 4.1:打造实现边缘计算的最佳平台
  4. C++(STL):05---智能指针之unique_ptr
  5. Android的权限
  6. growup怎么读_growup..是什么意思
  7. 单独学java_自学Java的几大误区是什么
  8. frameset框架如何使左边页面显示,隐藏?wj-wangjun
  9. html顶栏符号不显示,html – 带有USE标记的SVG无法呈现
  10. cordova 美洽_phonegap-cordova-美洽客服插件-ios
  11. ray 渲染基本使用流程
  12. Mybatis 特殊符号(大于,小于,不等于)及常用函数总结
  13. v8 8.0以上版本中,V8_COMPRESS_POINTERS引发的崩溃
  14. 【前端三分钟】利用Javascript实现打字效果
  15. 水库安全监测主要包含什么内容(大坝安全监测、水雨情自动测报)
  16. Dremel-大数据上的交互式分析
  17. 潘多拉游戏机用linux,linux中的潘多拉! Busybox!
  18. ROS机器人程序设计(原书第2版)学习镜像分享及使用说明
  19. 面向自动驾驶的高精度地图
  20. cgminer 2.2.4 参数详解!

热门文章

  1. php软件开发--linux进阶
  2. 2017 开源软件排行_2017年政府和公民如何使用开源解决人类问题
  3. github初学者指南_GitHub初学者指南
  4. 测试 | 测试:你会这些命令吗?
  5. JavaScript实现元素全排列
  6. Bootstrap表格样式
  7. 如何使用计算机实现fft,快速傅立叶变换(FFT)的计算机实现..doc
  8. imail PHP,NT下基于邮件服务软件(IMAIL)的邮件发送程序–(本地版)-PHP教程,邮件处理...
  9. 非局域网情况下ROS开发利器——Husarnet
  10. 两台服务器之间mysql数据库怎么做同步_MySQL 数据库同步结构总结