1. BFS模板

按层次的顺序进行遍历:

void BFS(int s){queue<int> q;q.push(s);while(){取出队首元素top;访问队首元素;将队首元素出队;将top的下一层结点未入队的结点全部入队,并设置为已入队;}
}

2. 详细说明

  1. 定义队列q,并将队首s入队
  2. 写一个while循环,循环条件是队列q非空
  3. 在while循环中,先取队首元素top,并访问它(访问:可以是任何事,比如将其输出),将其出队
  4. 将top的下一层结点中所有未曾入队的元素入队,并标记它们的层号为now+1,同时设置这些入队的结点已入队
  5. 返回(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--常用模板及实际应用相关推荐

  1. html5常用模板下载网站

    html5常用模板下载网站 开创者素材.站长素材.模板之家 推荐葡萄家园素材网,他们网页模板栏目有个HTML模板,很多静态源码.应该是你所需要的. html静态页面模板 还是服饰素材啊 朋友 设计云 ...

  2. 雅思作文模板.html,雅思小作文常用模板万能句大全

    雅思小作文模板--柱状图 柱状图和线型图写法一致,并且结合饼状图来写! 表格题 1. 找出值,最小值,以及一般值 2. 进行分析比较,找出近似值和相差很大的数值 常用句式 1.a is nearly ...

  3. ros开发增加clion常用模板及初始化配置(六)

    ros开发增加clion常用模板及初始化配置(六) c++模板 cpp_regex正则匹配 #include <regex>Qstring checkcode="12312313 ...

  4. ros开发增加clion常用模板及初始化配置(五)

    ros开发增加clion常用模板及初始化配置(五) python模板 py_opencv_resize图片缩放_水平方向拉伸与左右截取 # 640 x 480 -> 1280 x 480(129 ...

  5. ros开发增加clion常用模板及初始化配置(四)

    ros开发增加clion常用模板及初始化配置(四) python模板 py_np_dot向量点乘 import numpy as np from math import sqrt# a与b点g乘得到一 ...

  6. ros开发增加clion常用模板及初始化配置(三)

    ros开发增加clion常用模板及初始化配置(三) python模板 py_math弧度转角度 import math DE2R = math.pi/180 #弧度=角度*DE2R py_unpack ...

  7. 软件测试实用技术与常用模板:内容提要

    内容提要 本书从软件测试实用理论和测试实训技术的角度出发, 以通俗易懂的语言讲述软件测试所需要的知识.并且以"手机信息管理系统模型"为测试软件平台,系统全面地对测试实用理论和实训技 ...

  8. 【VUE】vue3.0后台常用模板

    vue3.0后台常用模板: 1.vue-admin-perfect 在线预览 gitee国内访问地址:https://yuanzbz.gitee.io/vue-admin-perfect/#/home ...

  9. ros开发增加clion常用模板及初始化配置(二)

    ros开发增加clion常用模板及初始化配置(二) 在需要共享的文件夹内用控制台运行这个命令开启服务器,共享自己的文件,局域网电脑游览器登入这台电脑的ip加8000端口号即可访问 python -m ...

  10. ACM常用模板-数据结构

    数据结构方面常用模板总结,大多数代码摘自网络,个人整理总结 string: 任意进制转换:itoa(int n,char* s,int r) //将10进制n转换为r进制并赋给s流:#include& ...

最新文章

  1. 蜻蜓resin服务器虚拟目录的设置
  2. 在ListView的顶部和底部加入其他View
  3. SVG animation 回顾
  4. 【转】转 Linux调优方案,sysctl.conf的设置
  5. 平衡二叉树AVL详解
  6. 【动态规划】POJ-2229
  7. devops 解决了啥问题_您的DevOps有什么问题?
  8. 测量仪图片_介绍一款电线电缆检测智能影像测量仪
  9. 女生天天和我微信语音5小时以上,突然没有联系,应该怎么办?
  10. 如果创业遍地,你觉得会是怎么样的景象
  11. curl get请求传递参数_curl 命令
  12. 全国省市区(县)级地名xml(一)
  13. Python3之日志模板
  14. 科普 - CAMDS
  15. 输入输出阻抗,是怎么玩的?你会不?音频耦合电容怎么大小不一?
  16. 你可能不知道,你登曾是个气喘小胖子,靠努力逆袭完成梦想
  17. 前端写代码的推荐工具
  18. 人脸识别原理:(初级篇)内含PPT
  19. hugegraph图数据库索引详解
  20. Win10开启黑色护眼暗黑主题

热门文章

  1. mysql中触发器中分隔符_php – 在触发器中使用分隔符的Mysql错误
  2. php给网页加水印_php实现图片添加水印功能
  3. java同步list_Java集合--ArrayList出现同步问题的原因
  4. html alert 确认加事件,js事件中有alert执行顺序的问题
  5. Spring AOP之通知类别
  6. maven学习(2)
  7. 基于JAVA+SpringMVC+Mybatis+MYSQL的闲置物品交易平台
  8. django解决:ModuleNotFoundError: No module named ‘django.core.urlresolvers‘
  9. 【LeetCode】7. Reverse Integer
  10. Codeforces903E Swapping Characters