Ruby 图算法:广度优先搜索、路径查找与生成树构建
1. 广度优先搜索(Breadth-First Search)
广度优先搜索(BFS)是一种用于遍历或搜索树或图的算法。它从根节点(或起始顶点)开始,逐层地访问节点,先访问距离起始顶点最近的所有顶点,然后再访问距离稍远的顶点,以此类推。
1.1 与深度优先搜索的对比
深度优先搜索(DFS)的栈实现方式是将当前顶点的相邻顶点放入栈中,然后处理栈顶的顶点,并将其相邻顶点也放入栈中。这种策略使得与初始顶点相邻的顶点会被放在栈底,因此会在距离更远的顶点之后被处理。而如果我们使用队列代替栈,就可以实现广度优先搜索。在广度优先搜索中,相邻顶点会被优先处理,然后是这些相邻顶点的相邻顶点,依此类推。
1.2 广度优先搜索算法实现
以下是使用 Ruby 实现的基于队列的广度优先搜索算法:
def bfs(v)
raise ArgumentError, "No such vertex" if v < 0 or vertices <= v
queue = LinkedQueue.new
is_visited = []
queue.enter(Edge.new(-1,v))
while !queue.empty? do
edge = queue.leave
next if is_visited[edge.w]
yield edge.v,edge.w
is_visited[edge.w] = true
each_edge(edge.w) do |w,x|
超级会员免费看
订阅专栏 解锁全文
10

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



