广度搜索和深度搜索的分析

广度优先搜索和深度优先搜索各有他的优点,也有他们的不足之处。
广度优先搜索在遍历的时候不需要全部遍历,搜索到符合条件的就立即终止,这样就不会浪费太多时间。但是在遍历的过程中,他需要创建一个队列来保存遍历的状态(也就是遍历到的每一个结点需要先存入到队列中,然后取出),这样就无非就增加了空间复杂度。
而深度优先搜索则会遍历所有的结点,不需要保存遍历的状态,虽然时间复杂度高但是空间复杂度低。在使用深度优先搜索的时候非常容易超时,因为每次遍历时间复杂度都是以指数的形式增长的。所以我们在使用深度优先搜索的时候我们一般都会联合奇偶剪枝一起使用,这样就极大的降低了深度优先搜索的时间复杂度。
奇偶剪枝:奇偶剪枝就是在你遍历的过程中,首先判断你这个结点能不能按要求到达目的地,如果能,则访问他的邻结点,否则,退出这一层遍历。
部分内容来自:https://blog.csdn.net/chyshnu/article/details/6171758
把矩阵看成如下形式:
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
1 0 1 0 1 0
0 1 0 1 0 1
从为 0 的格子走一步,必然走向为 1 的格子 。
从为 1 的格子走一步,必然走向为 0 的格子 。
即:
从 0 走向 1 必然是奇数步,从 0 走向 0 必然是偶数步。

所以当遇到从 0 走向 0 但是要求时间是奇数的或者 从 1 走向 0 但是要求时间是偶数的,都可以直接判断不可达!
比如一张地图cS...
....
....
....
...D
要求从S点到达D点,此时,从S到D的最短距离为s = abs ( dx - sx ) + abs ( dy - sy )。
如果地图中出现了不能经过的障碍物:
S..X
XX.X
...X
.XXX
...D
此时的最短距离s' = s + 4,为了绕开障碍,不管偏移几个点,偏移的距离都是最短距离s加上一个偶数距离。
不管你怎么绕,最终到达目的地的步数都是一个最短步数加上一个偶数。

一般深度优先搜索用来解那种需要得到全部解的题,而广度优先搜索则是用来求最短路径的,到达的每一个结点都是最短路径。

广度搜索和深度搜索的分析相关推荐

  1. 【数据结构】无向图的遍历(广度搜索和深度搜索)

    说明 以邻接表作为存储结构 以用户指定的结点分别进行广度搜索和深度搜索 相应的生成树的边集 运行截图 源代码 import java.util.*;public class AdjacencyList ...

  2. 广度搜索与深度搜索的区别

    广度搜索(Breadth-First Search,BFS)是一种基于图的遍历算法,它按照广度优先的方式遍历图中的所有节点.具体来说,该算法从起点开始向外扩展,先遍历起点所有直接相邻的节点,然后再遍历 ...

  3. 【人工智能】八数码问题:广度搜索、深度搜索

    应用广度搜索BFS和深度搜索DFS解决八数码问题,广度搜索和深度搜索都是盲目搜索,相关理论知识,算法过程:问题求解:状态空间图和盲目搜索. 参考:7种方法求解八数码问题 Python实现A*算法解决N ...

  4. 【算法】深度搜索(DFS) 和 广度搜索(BFS)

    深度搜索(DFS) 点:然后退回到该顶点,搜索其它路径,直到以该顶点为始点的所有路径的顶点都被访问,深度搜索算法是递归算法,因为对于没一个节点来说,执行的是同样的操作.  简单来说,深度搜素算法就是一 ...

  5. 深度搜索(DFS)和广度搜索(BFS)

    深度搜索(DFS) 一.搜索方法:  沿出发顶点的第一条路径尽量深入,遍历路径上所有顶点:然后退回到该顶点,搜索其它路径,直到以该顶点为始点的所有路径的顶点都被访问,深度搜索算法是递归算法,因为对于没 ...

  6. 深度搜索和广度搜索特点的深刻理解

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

  7. 深度搜索问题c语言,C语言实现的图的深度搜索与广度搜索程序.doc

    C语言实现的图的深度搜索与广度搜索程序 C语言实现的图的深度搜索与广度搜索程序 /* 上机试验5-图的建立和遍历 1)建立[无向][非连通]图的邻接表存储结构,要求顶点个数不少于15个. 2)用DFS ...

  8. 深度搜索 java_java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法...

    java实现的深度搜索与广度搜索算法BFS,DFS以及几种最短路径算法 public class City { String name; int id; static int idCounter = ...

  9. 万能的搜索——深度搜索和广度搜索

    搜索分为深度优先搜索(dfs)和广度优先搜索(bfs) 深度搜索和广度搜索的区别是: 深度搜索是往深度方向进行搜索的,先选一条路走到底,再选另一条路: 广度搜索是一层一层的,把一层上的所有情况都搜索到 ...

  10. 【图】图的深度搜索和广度搜索

    深度优先搜索 图的深度优先遍历(Depth First Search,DFS)是一种遍历图的算法,其基本思想是从起始顶点开始,不断访问邻接顶点,直到无法继续访问为止,然后回溯到之前的顶点,继续访问其未 ...

最新文章

  1. gil php,网络编程之多线程——GIL全局解释器锁
  2. 【Three.js】关于Three.js的辅助库ststs.js报错的解决方案
  3. conda (picard)
  4. Linux 小知识翻译 - 「端口限制」
  5. NUXT快速开始,选择Vuetify
  6. 推荐一个好玩的鼠标和键盘使用情况统计软件,完全免费
  7. mysql语句在node.js中的写法
  8. 2018-2019 20165208 网络对抗 Exp3 免杀原理与实践
  9. mysql首次_mysql首次登陆任务
  10. 计算机中管理用户数据的单位是,文件_操作系统管理用户数据的单位是______。...
  11. 精通RPM之--制作篇(rpmbuild)
  12. opencv-api imread imwrie
  13. web前端要学哪些东西,前端大牛分享的技能整理
  14. android app 颜色搭配,色采 - 写给大家用的配色 App - Android 应用 - 【最美应用】
  15. linux安装谷歌浏览器(Chrome)
  16. 用GetData软件自动读取图中的数据
  17. BZOJ.4340.[BJOI2015]隐身术(后缀数组 搜索)
  18. 脱机运行scp linux,解决CentOS使用不了scp命令
  19. 中国医科大学22春《毛泽东思想和中国特色社会主义理论体系概论(本科)》在线作业【标准答案】
  20. FluentData

热门文章

  1. java 调用 pb dll_[转载]一个java调用delphi写的dll问题,郁闷了一天一晚解决
  2. Linux下把ncsi设置成OCP模式,一种支持NCSI信号管理功能自动切换的电路及服务器的制作方法...
  3. 申论该怎么学?申论作文如何提高
  4. VTN系列多通道振弦模拟信号采集仪常规操作
  5. python调用子函数_类中的Python调用函数
  6. openssl_sign(): supplied key param cannot be coerced into a private key
  7. How Did Watson Answer? —— Typing Coerced Candidate Answer
  8. 【谨记】PCB画板子的正确步骤(说多了,都是泪啊!)
  9. 紧急重要四象限软件用哪款便签软件?
  10. Flink 第8.2章 Flink 的键组 KeyGroup 与 缩放 Rescale