有关DFS和BFS的一些个人理解

其实这两个都是搜索,首先先说一下搜索吧,在我看来,现在这两个算法对我的用处只有在图中,主要是为了找最短路径已经某点到某点的路径条数。

首先先说DFS(深度优先搜索),抓住关键词“深度”,也就是说要一直往深处走,注意是,一直,往,深处,走,但也不能一直走,不然就死循环了,所以这个深处要注意限度,走到这个限度就不再走了,但需要回溯。DFS主要实现方式是靠递归的(或者堆栈也可以,不过有些麻烦)。

空说有点不好理解,来看例题吧



定义一个二维数组: 

int map[5][5] = {

       0  #  0  0  0
       0  #  0  #  0
       0  0  0  0  0
       0  #  #  #  0
       0  0  0  #  0

};



它表示一个迷宫,其中的#表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。


理解完题意后就可以看ppt或者视频了

https://pan.baidu.com/s/1LWHrZ1v1aE1XIhoU7OBaSA
提取码:kize

Ps:建议理解完DFS再来理解BFS,两个虽然叫法差一个字母,但思路却差好多

下面说BFS

BFS(广度优先搜索),关键词,广度,DFS是深度,就是莽着头一直走到无路可走然后回溯,BFS没有那么莽,BFS每一步都是走自己可以走的所有可能走的路,但编程是不可能分为两个进程去走不同的路,只能单线程的走,所以BFS主要是用队列来执行的,队列的特征非常适合,队列是先进先出,也就是说,把每次可能走的方向走存下来,一次存到队列尾,然后每次循环都从队列头拿出一个方向走,走到一个地点然后接着重复刚才的入队操作。BFS主要是以循环的方式执行的,所以需要考虑结束循环的条件,正常来说,结束循环的条件有两个,队列为空或者走到目的地,两种结束循环的条件自己体会,BFS的ppt和视频里都有解释的可以自己体会。

接下来可以去看BFS的视频和ppt了

———————————————————

能说的就这么多了,这两个算法主要还是依靠自己打出来,体会。

建议做题,可以先考虑一下用DFS打出全排列,这是学DFS的必需要学的,还有PTA上数据结构与算法的7-9旅游规划。

有关DFS和BFS中的图可以用int的二位数组实现,标记用0或者1

有关BFS中的队列用C++里的queue实现,对于队列的一些知识可以自己再去找找,不用全部理解,只需要知道队列是干什么的,知道入队和出队pop,top,push,empty,size,是干什么的就行了。

注意,两个搜索最重要的都是要标记已经走过的路,标记已经走过的路,标记已经走过的路,比如0表示路,1表示墙,那么可以用1表示墙或者其他数字都行,视频中的1 2 3 4 5表示的是走到这一点是第几步。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值