BFS--常用模板及实际应用
1. BFS模板
按层次的顺序进行遍历:
void BFS(int s){queue<int> q;q.push(s);while(){取出队首元素top;访问队首元素;将队首元素出队;将top的下一层结点未入队的结点全部入队,并设置为已入队;}
}
2. 详细说明
- 定义队列q,并将队首s入队
- 写一个while循环,循环条件是队列q非空
- 在while循环中,先取队首元素top,并访问它(访问:可以是任何事,比如将其输出),将其出队
- 将top的下一层结点中所有未曾入队的元素入队,并标记它们的层号为now+1,同时设置这些入队的结点已入队
- 返回(2)继续循环
3. 实际应用
代码:
#include <cstdio>
#include <queue>
using namespace std;
const int maxn = 100;
struct node{int x,y;
}Node;int n,m;
int matrix[maxn][maxn];
bool inq[maxn][maxn] = {false};
int X[4] = { 0 , 0 , 1 , -1 };
int Y[4] = { 1 , -1 , 0 , 0 };bool judge(int x , int y){if(x >= n || x < 0 || y >= m || y < 0){return false;}if(matrix[x][y] == 0 || inq[x][y] == true){return false;}return true;
}void BFS(int x , int y){queue<node> Q;Node.x = x;Node.y = y;Q.push(Node);inq[x][y] = true;while(!Q.empty()){node top = Q.front();Q.pop();for(int i = 0 ; i < 4 ;i++){int newX = top.x +X[i];int newY = top.y +Y[i];if(judge(newX,newY)){Node.x = newX ;Node.y = newY ;Q.push(Node) ;inq[newX][newY] = true ; }}}
}int main(){scanf("%d %d" , &n , &m);for(int x = 0 ; x < n ; x++){for(int y = 0 ; y < m ; y++){scanf("%d",&matrix[x][y]);}}int ans = 0; for(int x = 0 ; x < n ; x++){for(int y = 0 ; y < m ; y++){if(matrix[x][y] == 1 && inq[x][y] == false){ans ++ ;BFS(x,y);} } }printf("%d\n",ans);return 0;
}
4. 题目
代码:
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int maxn = 100;
struct node{int x,y;int step;
}S,T,Node;int n,m;
char matrix[maxn][maxn];
bool inq[maxn][maxn] = { false };
int X[4] = { 0 , 0 , 1 , -1 };
int Y[4] = { 1 , -1 , 0 , 0 };bool judge(int x , int y){if(x >= n || x < 0 || y >= m || y < 0){return false;}if(matrix[x][y] == '*' || inq[x][y] == true){return false;}return true;
}int BFS(){queue<node> Q;Q.push(S);while(!Q.empty()){node top = Q.front();Q.pop();if(top.x == T.x && top.y == T.y){return top.step;}for(int i = 0 ; i < 4 ;i++){int newX = top.x + X[i];int newY = top.y + Y[i];if(judge(newX,newY)){Node.x = newX ;Node.y = newY ;Node.step = top.step + 1;Q.push(Node) ;inq[newX][newY] = true ; }}}return -1;
}int main(){scanf("%d %d",&n,&m);for(int x = 0 ; x < n ; x++){getchar(); for(int y = 0 ; y < m ; y++){matrix[x][y] = getchar();}matrix[x][m+1] ='\0'; }scanf("%d%d%d%d",&S.x,&S.y,&T.x,&T.y);S.step = 0;printf("%d\n",BFS());return 0;
}
BFS--常用模板及实际应用相关推荐
- html5常用模板下载网站
html5常用模板下载网站 开创者素材.站长素材.模板之家 推荐葡萄家园素材网,他们网页模板栏目有个HTML模板,很多静态源码.应该是你所需要的. html静态页面模板 还是服饰素材啊 朋友 设计云 ...
- 雅思作文模板.html,雅思小作文常用模板万能句大全
雅思小作文模板--柱状图 柱状图和线型图写法一致,并且结合饼状图来写! 表格题 1. 找出值,最小值,以及一般值 2. 进行分析比较,找出近似值和相差很大的数值 常用句式 1.a is nearly ...
- ros开发增加clion常用模板及初始化配置(六)
ros开发增加clion常用模板及初始化配置(六) c++模板 cpp_regex正则匹配 #include <regex>Qstring checkcode="12312313 ...
- ros开发增加clion常用模板及初始化配置(五)
ros开发增加clion常用模板及初始化配置(五) python模板 py_opencv_resize图片缩放_水平方向拉伸与左右截取 # 640 x 480 -> 1280 x 480(129 ...
- ros开发增加clion常用模板及初始化配置(四)
ros开发增加clion常用模板及初始化配置(四) python模板 py_np_dot向量点乘 import numpy as np from math import sqrt# a与b点g乘得到一 ...
- ros开发增加clion常用模板及初始化配置(三)
ros开发增加clion常用模板及初始化配置(三) python模板 py_math弧度转角度 import math DE2R = math.pi/180 #弧度=角度*DE2R py_unpack ...
- 软件测试实用技术与常用模板:内容提要
内容提要 本书从软件测试实用理论和测试实训技术的角度出发, 以通俗易懂的语言讲述软件测试所需要的知识.并且以"手机信息管理系统模型"为测试软件平台,系统全面地对测试实用理论和实训技 ...
- 【VUE】vue3.0后台常用模板
vue3.0后台常用模板: 1.vue-admin-perfect 在线预览 gitee国内访问地址:https://yuanzbz.gitee.io/vue-admin-perfect/#/home ...
- ros开发增加clion常用模板及初始化配置(二)
ros开发增加clion常用模板及初始化配置(二) 在需要共享的文件夹内用控制台运行这个命令开启服务器,共享自己的文件,局域网电脑游览器登入这台电脑的ip加8000端口号即可访问 python -m ...
- ACM常用模板-数据结构
数据结构方面常用模板总结,大多数代码摘自网络,个人整理总结 string: 任意进制转换:itoa(int n,char* s,int r) //将10进制n转换为r进制并赋给s流:#include& ...
最新文章
- 蜻蜓resin服务器虚拟目录的设置
- 在ListView的顶部和底部加入其他View
- SVG animation 回顾
- 【转】转 Linux调优方案,sysctl.conf的设置
- 平衡二叉树AVL详解
- 【动态规划】POJ-2229
- devops 解决了啥问题_您的DevOps有什么问题?
- 测量仪图片_介绍一款电线电缆检测智能影像测量仪
- 女生天天和我微信语音5小时以上,突然没有联系,应该怎么办?
- 如果创业遍地,你觉得会是怎么样的景象
- curl get请求传递参数_curl 命令
- 全国省市区(县)级地名xml(一)
- Python3之日志模板
- 科普 - CAMDS
- 输入输出阻抗,是怎么玩的?你会不?音频耦合电容怎么大小不一?
- 你可能不知道,你登曾是个气喘小胖子,靠努力逆袭完成梦想
- 前端写代码的推荐工具
- 人脸识别原理:(初级篇)内含PPT
- hugegraph图数据库索引详解
- Win10开启黑色护眼暗黑主题
热门文章
- mysql中触发器中分隔符_php – 在触发器中使用分隔符的Mysql错误
- php给网页加水印_php实现图片添加水印功能
- java同步list_Java集合--ArrayList出现同步问题的原因
- html alert 确认加事件,js事件中有alert执行顺序的问题
- Spring AOP之通知类别
- maven学习(2)
- 基于JAVA+SpringMVC+Mybatis+MYSQL的闲置物品交易平台
- django解决:ModuleNotFoundError: No module named ‘django.core.urlresolvers‘
- 【LeetCode】7. Reverse Integer
- Codeforces903E Swapping Characters