广度优先搜索,也叫宽度优先搜索,从开始状态,到第一次能到达的状态,再从第一次能到达的状态到下一个能到达的状态,直到探索所有可到达的状态,其时间复杂度为O(状态数×转移的方式)。

广度优先搜索使用了队列的数据结构,搜索时先将初始状态加入队列,,此后从队列前端不断取出状态,把从该状态可以转移到的状态中尚未访问过的部分加入队列,直到队列被抽空或找到了问题的解。

由于广度优先搜索由近到远的顺序特点,它可以用来求最短路径,最少操作等问题的答案。

广度优先搜索中,为做到由近及远的搜索,需要将已经访问过的标记管理起来。状态复杂的可以封装成一个类来表示。

例如最经典的迷宫问题:

const int INF = 100000000;typedef pair<int, int> P;char maze[MAX_N][MAX_M + 1];
int N, M;
int sx, sy;
int gx, gy;int d[MAX_N][MAX_M];int dx[4] = {1, 0, -1, 0}, dy[4] = {0, 1, 0, -1};int bfs()
{queue<P> que;for(int i=0;i<N;i++)for(int j=0;j<M;j++)d[i][j] = INF;que.push(P(sx, sy));d[sx][sy] = 0;while(que.size()){P p = que.front();q.pop();if(p.first == gx && p.second == gy) break;for(int i=0;i<4;i++){int nx = p.first + dx[i], ny = p.second + dy[i];if(0 <= nx && nx<N && 0<=ny && ny<M && maze[nx][ny] != '#' && d[nx][ny] == INF){que.push(P(nx, ny));d[nx][ny] = d[p.first][p.second] + 1;}}}return d[gx][gy];
}void solve()
{int res = bfs();printf("%d\n", res);
}

与dfs相比,bfs更加浪费空间,dfs则比较节省空间。一种采用与广度优先搜索类似的状态转移顺序,且注重节约内存占用的迭代加深深度优先搜索(IDDFS)。

广度优先搜索 宽度优先搜索 迷宫问题 最短路径 最少操作 由近及远 队列相关推荐

  1. 广度优先搜索 - 宽度优先搜索 - 横向优先搜索 (breadth-first search,BFS)

    广度优先搜索 - 宽度优先搜索 - 横向优先搜索 (breadth-first search,BFS) 1. 广度优先搜索 - 宽度优先搜索 - 横向优先搜索 (breadth-first searc ...

  2. 生成图-深度优先搜索/宽度优先搜索

    问题提出: 考虑如下图所示的简单图所表示的缅因州的道路系统.在冬天里保持道路通路通畅的唯一方式就是经常扫雪.高速公路部分希望只扫尽可能少的道路上的雪,而确保总是存在连接任何两个乡镇的干净道路.如何才能 ...

  3. 迷宫问题 深度优先搜索 广度优先搜索 宽度优先搜索【python】

    文章目录 一.实验内容 二.深度优先搜索和广度优先搜索总结 1.深度优先搜索算法 2.广度优先搜索算法 三.实验代码和用于测试的迷宫 1.实验代码 2.测试迷宫 2.1 maze1.txt 2.2 m ...

  4. BFS(宽度优先搜索、广度优先搜索)

    宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型.Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽度优先搜索类似的思想.其别名又 ...

  5. 广度优先搜索、宽度优先搜索,《学点算法吧,Python》

    一.广度优先搜索 广度优先搜索算法(又称宽度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型. 广度优先搜索是一种用于图的查找方法,可以帮助解决两个问题: 从节点A出发,有前 ...

  6. 八数码宽度优先搜索python代码_图之遍历--广度优先遍历

    何为广度优先遍历呢? 广度优先遍历(BFS),又叫宽度优先搜索或横向优先搜索,是从根结点开始沿着树的宽度搜索遍历,将离根节点最近的节点先遍历出来,在继续深挖下去. 基本思想是: 1.从图中某个顶点V0 ...

  7. 野人与传教士——宽度优先搜索(完整报告,含全部代码)

    题目: 野人与传教士渡河问题:3个野人与3个传教士打算乘一条船到对岸去,该船一次最多能运2个人,在任何时候野人人数超过传教士人数,野人就会把传教士吃掉,如何用这条船把所有人安全的送到对岸?在实现基本程 ...

  8. 广度/宽度优先搜索(BFS)详解

    1.前言 广度优先搜索(也称宽度优先搜索,缩写BFS,以下采用广度来描述)是连通图的一种遍历策略.因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域,故得名. 一般可以用它做什么呢?一 ...

  9. 搜索入门之BFS宽度优先搜索

    基础搜索入门BFS BFS全称宽度优先搜索算法(又称广度优先搜索)是最简便的图的搜索算法之一,这一算法也是很多重要的图的算法的原型.Dijkstra单源最短路径算法和Prim最小生成树算法都采用了和宽 ...

最新文章

  1. python源代码-Python 源码深度剖析
  2. EduCoder Linux之文件打包和解压缩
  3. 常数除以0的极限是什么_【极限】第四节 极限运算法则
  4. 有关不蒜子访问统计无法显示的解决方法
  5. C++:18---const关键字(附常量指针、指针常量、常量指针常量)
  6. 16.对极几何——极线约束,收敛相机,平行图像平面,两个立体对 测验_2
  7. bpe编码_缓冲池扩展(BPE)–缓冲池简介
  8. 从Windows文件夹到Linux分区
  9. 3 描述android的组件,Android基础------Intent组件
  10. Atitit。 《吠陀》 《梨俱吠陀》overview 经读后感  是印度上古时期一些文献的总称
  11. Linux RedHat 7 配置本地 YUM源
  12. PDM,读《电商产品经理宝典:电商后台系统产品逻辑全解析》
  13. Serv-U FTP服务器安装带绿化版工具
  14. CCF 201712-3 Crontab
  15. ue4简单编辑器功能RuntimeTransformer
  16. 学生个人信息管理系统(mysql)
  17. Python每日一练-----三点共线问题
  18. 云原生之 Ansible 篇(一)
  19. CSS盒子塌陷及解决方法
  20. A16Z和去中心化金融大佬们在伯克利都讲了什么?|创业者说

热门文章

  1. 网站推广策略-网站推广120种实用方法_打杂的_新浪博客
  2. Android-自定义桌面小部件【完成小米MIUI小部件】
  3. 四旋翼无人机飞控系统设计(姿态解算)
  4. TWaver最强大的ShapeNode功能
  5. 软考中级的软件设计师难考吗?
  6. [OpenCv]简单摄像头监控Demo
  7. JavaJSP调用JavaScript方法
  8. cocos 贝塞尔曲线编辑器
  9. 链表动画演示 等比数列 linux视频等
  10. Spring AOP的作用,动态代理模式