前言
相信很多同学都有听过用深度优先,广度优先去遍历图数据结构的结点,但对它们的具体实现总是模糊的,下面是我总结的关于DFS和BFS的实现方式,希望可以帮到大家。
DFS
伪代码
顶点入栈
对顶点作入栈标记防止其二次入栈
while (栈非空)
访问栈顶p
pop 栈顶p
for q 为 p 的邻接结点
if(q未被标记)
q 入栈
对q作入栈标记防止其二次入栈
广度优先与深度优先在实现上十分类似,只需要把栈换成队列即可
BFS
伪代码
顶点入队
对顶点作入队标记防止其二次入队
while (队非空)
访问队头p
pop 队头p
for q 为 p 的邻接结点
if(q未被标记)
q 入队
对q作入队标记防止其二次入队
BFS(带深度版)
伪代码
顶点入队
对顶点作入队标记防止其二次入队
depth=-1
while (队非空)
++depth
n = 队的大小
while (n--)
访问队头p
pop 队头p
for q 为 p 的邻接结点
if(q未被标记)
q 入队
对q作入队标记防止其二次入队