如此经典的算法竟一直没有单独的实现过,真是遗憾啊。
广度优先搜索在过去实现的二值图像连通区域标记和prim最小生成树算法时已经无意识的用到了,深度优先搜索倒是没用过。
这次单独的将两个算法实现出来,因为算法本身和图像没什么关系,所以更纯粹些。
广度优先搜索是从某一节点开始,搜索与其线连接的所有节点,按照广度方向像外扩展,直到不重复遍历所有节点。
深度优先搜索是从某一节点开始,沿着其搜索到的第一个节点不断深入下去,当无法再深入的时候,回溯节点,然后再在回溯中的某一节点开始沿另一个方向深度搜索,直到不重复的遍历所有节点。
广度优先搜索用的是队列作为临时节点存放处;深度优先搜索可以递归实现(算法导论就是用递归实现的伪代码),不过我这里是用栈作为临时节点存放处。
感觉也没什么好介绍的了,抄算法导论上的介绍也没什么意思,所有的内容都是书上的,真正学东西还是要看书。
下面是运行结果:
原连通图:

广度优先搜索:

深度优先搜索:

matlab代码如下,其中的画图函数netplot.m。
BFS.m
clear all;close all;clc %初始化邻接压缩表 b=[1 2;1 3;1

这篇博客介绍了如何在MATLAB中实现广度优先搜索(BFS)和深度优先搜索(DFS)这两种经典算法。作者提到过去在二值图像连通区域标记和Prim最小生成树算法中已无意识地应用了BFS,而DFS则是首次单独实现。BFS使用队列进行节点扩展,DFS则通过栈或递归实现。博主强调理解算法应阅读相关书籍,并提供了MATLAB代码示例。
最低0.47元/天 解锁文章
4822

被折叠的 条评论
为什么被折叠?



