岛屿数量问题(用广度优先算法)
2020-02-16 18:05
127 查看
广度优先算法是一种使用队列遍历所有节点状态的算法,
根节点放入队列,
然后拿出队列中第一个节点
获得该节点所有未被访问过得后续节点存入队列
当队列为空,则遍历结束。
岛屿数量问题是给一个nxm的二维数组,获得四周都是水的岛屿数量,1代表土地,0代表海水
代码如下:
[code]bfs.h #pragma once #include<iostream> typedef struct position { int x; int y; }pos;
[code]bfs.c #include"BFS.h"//岛屿数量 #include"queue" //思路,相连节点放入队列, bool visited[5][5] = {false}; //被访问标识 int map[5][5]; //地图5x5 int count = 0; int main() { std::queue<pos> q; // for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { scanf_s("%d",&map[i][j]); //输入地图 } } for (int m = 0; m < 5; m++) { for (int n = 0; n < 5; n++) { if (visited[m] != true && map[m] == 1) { visited[m] = true; pos x = { m,n }; q.push(x); while (!q.empty())//队列不为空就循环 { int e = q.front().x; int f = q.front().y; if (e - 1 >= 0) { if (visited[e - 1][f] != true) { visited[ e- 1][f] = true; if (map[e - 1][f] == 1) { pos a = { e - 1,f }; q.push(a); } } } if (e + 1 < 5) { if (visited[e + 1][f] != true) { visited[e + 1][f] = true; if (map[e + 1][f] == 1) { pos b = { e + 1,f }; q.push(b); } } } if (n - 1 >= 0) { if (visited[e][f - 1] != true) { visited[e][f - 1] = true; if (map[e][f - 1] == 1) { pos c = { e,f - 1 }; q.push(c); } } } if (n + 1 < 5) { if (visited[e][f + 1] != true) { visited[e][f + 1] = true; if (map[e][f + 1] == 1) { pos d = { e,f + 1 }; q.push(d); } } } q.pop(); } count++; } } } printf("%d",count); system("pause"); return 0; }
广度优先算法经常被用作计算最短路径。
- 点赞
- 收藏
- 分享
- 文章举报
![](https://g.csdnimg.cn/static/user-reg-year/1x/5.png)
相关文章推荐
- 岛屿数量问题(深度优先)
- DEV-C++支持C99标准设置方法
- 详解socket编程:bind()函数为什么要使用地址类型转化传递参数?
- fedora等linux虚拟机,虚拟机识别了u盘,但在linux系统里却无法找到u盘文件夹
- 国密算法SM4-PHP实现
- C走迷宫源文件,建议使用Dev-C++编译
- 制作坑人的多层文件夹(使用批处理文件)
- 错误:AttributeError: module 'easygui' has no attribute 'msgbox'
- vue.js循环加载图片资源及其他
- 如何用一次循环得到数组中第二大数
- 使用map删除字符串的交集
- Git学习笔记(一)
- Git学习笔记(二)
- Git学习笔记(三)
- scikit-learn机器学习常用算法原理及编程实战(一)
- scikit-learn机器学习常用算法原理及编程实战(二)
- scikit-learn机器学习常用算法原理及编程实战(五)
- Deep Residual Learning for Image Recognition
- JetBrains系列软件用法
- PHP Tips