题目描述:
用一个二维数组代表一张地图,这张地图由字符“0”与字符“1”组 成,其中“0”字符代表水域,“1”字符代表小岛土地,小岛“1”被 水“0”所包围,当小岛土地“1”在水平和垂直方向相连接时,认 为是同一块土地。求这张地图中小岛的数量

解决导图如下:

代码如下:

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <queue>using namespace std;void dfs(std::vector<std::vector<int> > &mark,std::vector<std::vector<char> > &map,int x,int y) {mark[x][y] = 1;int dx[] = {-1,1,0,0};int dy[] = {0,0,-1,1};for (int i = 0;i < 4; ++i) {int newx = x + dx[i];int newy = y + dy[i];if (newx < 0 || newx >= map.size() || newy < 0 || newy >= map[i].size() ) {continue;}if (mark[newx][newy] == 0 && map[newx][newy] == '1') {dfs(mark, map, newx, newy);}}
}void bfs(std::vector<std::vector<int> > &mark,std::vector<std::vector<char> > &map,int x,int y) {mark[x][y] = 1;queue<pair<int,int>> Q;int dx[] = {-1,1,0,0};int dy[] = {0,0,-1,1};Q.push(make_pair(x,y));while(!Q.empty()) {/* code */x = Q.front().first;y = Q.front().second;Q.pop();for (int i = 0;i < 4; ++i) {int newx = dx[i] + x;int newy = dy[i] + y;if(newx < 0 || newx >= map.size() || newy < 0 || newy >= map[i].size()) {continue;}if (mark[newx][newy] == 0 && map[newx][newy] == '1') {Q.push(make_pair(newx,newy));mark[newx][newy] = 1;}}}
}int get_island_nums(std::vector<std::vector<char> > &map) {int island_num = 0;std::vector<std::vector<int> > mark;for (int i = 0;i < map.size(); ++i) {mark.push_back(std::vector<int> ());for (int j = 0;j < map.size(); ++j) {mark[i].push_back(0);}}for (int i = 0; i < map.size(); ++i) {for (int j = 0;j < map[i].size(); ++j){if (mark[i][j] == 0 && map[i][j] == '1') {//dfs(mark, map, i ,j);bfs(mark, map, i ,j);island_num ++;}}}return island_num;
}int main(int argc, char const *argv[])
{char str[10][10] = {"11100", "11000", "00100", "00011"};std::vector<std::vector<char> > map;for (int i = 0; i < 4; ++i) {map.push_back(std::vector<char> ());for (int j = 0;j < 5; ++j) {map[i].push_back(str[i][j]);}}cout << get_island_nums(map) << endl; return 0;
}

搜索:深搜/广搜 获取岛屿数量相关推荐

  1. 深搜广搜专题【DFS】【BFS】

    深搜广搜专题 又是一年专题时,这次的专题是BFS和DFS,我们刚加入acm时的噩梦,然而现在已经写起来很舒服了(OS:那你还A不出题?) BFS和DFS都是通过对所有的点进行遍历来得到结果的,是一种比 ...

  2. 第七届蓝桥杯-剪邮票(深搜+广搜)

    剪邮票 如下图, 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连)比如,下面两个图中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少种不 ...

  3. 小游戏系列算法之五广度优先搜索,双向广搜,八数码,华容道

    前段时间在玩仙五前,遇上了蚩尤冢拼图这个小游戏. 其实就是八数码问题,一直想着如何才能用最少步数求解,于是就写了个程序. Q1:什么是八数码问题? A1:首先假定一个3*3的棋盘(如上图),分别有1, ...

  4. 力扣 547. 朋友圈 c语言 三种解法 深搜 广搜 并查集。

    题目: 并查集: /*力扣 547 朋友圈 并查集 c语言 2020/12/14 1:04 by ksks14*/ /*初始化 查找 合并*/ #define maxsize 10000 int fl ...

  5. 简单深搜广搜基本模板

    简单搜索 DFS: 剪枝,条件 容易超时,超时后基本就是剪枝的问题/无限递归?,或者用广搜试试? 模板(自己的理解) int n,m;//一般输入的行列数/边界 int mov[4][2] = {1, ...

  6. poj3083 Children of the Candy Corn 深搜+广搜

    这道题有深搜和广搜.深搜还有要求,靠左或靠右.下面以靠左为例,可以把简单分为上北,下南,左西,右东四个方向.向东就是横坐标i不变,纵坐标j加1(i与j其实就是下标).其他方向也可以这样确定.通过上一步 ...

  7. 深搜+广搜——Lake Counting S(洛谷 P1596)

    题目选自洛谷P1596 这道题目我觉得是比较综合的搜索题了,可以用dfs.bfs来解题.下面给出2种方法的思路: 首先,确定什么情况是一个水坑: 对于每一个'w' ,如果在八个方向上有于其相邻的'w' ...

  8. 【搜索】【广搜模板】

    ACM模板 C++queue的应用 struct note{ int x; //横坐标 int step; //步数 int y; //纵坐标 }; void BFS(note front_head) ...

  9. 最是一年留不住,彩云易散琉璃碎---补题模拟,深搜广搜简单题

    链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 题目a 在风景如画,美女如云的SMU生活学习一年后,多金的花样少年JolerJolerJoler练成了见女生必送鲜花的浪漫绝技.这一天,Jo ...

最新文章

  1. alert 回调_element之Alert 警告
  2. java struts2模拟百度百科图片中的防盗链设置
  3. 在redhat9上安装firefox
  4. 这里有一份面筋请查收(七)
  5. 判断一个数是否是2的平方
  6. 【Ubuntu-Opencv】Ubuntu14.04 Opencv3.3.0 完整卸载方案
  7. else应输入一个语句是什么意思_Python基础知识储备,关于if-else使用性能的一点感悟...
  8. 区域风云企业之大立-DVR产品的新技术应用
  9. Android OkHttp经验小结
  10. php 设为首页 收藏_如何在网站上添加“设为首页”“加入收藏”
  11. NTFS格式分区大小数值表
  12. python编写代码运用递归画图形_python数据结构与算法 22 递归图形
  13. cocos2dx阴影层的实现
  14. vs2017安装qt插件及安装qt插件后的设置
  15. Anaconda 安装python时出错:Collecting package metadata (current_repodata.json): failed
  16. [学习笔记]opencv双线性插值法图像放大
  17. 用JavaScript写的一个摇号程序(随机数)
  18. 阿特拉斯拧紧枪说明书_ATLAS 阿特拉斯 DS手枪式电动拧紧枪
  19. hive报错Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
  20. 传说中的ARM架构与X86架构

热门文章

  1. 十一月第三周学习进度条
  2. JSON http://www.cnblogs.com/haippy/archive/2012/05/20/2509329.html
  3. [转]Getting Start With Node.JS Tools For Visual Studio
  4. (原创)c#学习笔记10--定义类成员03--接口的实现01--显示实现接口成员
  5. java.lang.NoSuchMethodException 错误
  6. 一个“复制/删除”方式的滚动
  7. undefined reference to 'pthread_create'问题解决(转)
  8. 码云上传代码添加标签_如何使用码云-百度经验
  9. vc2010解决方案项目编译顺序_科学网—VS2012 (2008,2010) 编译问题解决合集 - 冯博远的博文...
  10. java人工洗牌窗口程序_求解,用JAVA写洗牌与发牌模拟程序