BFS遍历来自给定节点的有向图

时间:2010-04-06 04:00:34

标签: algorithm graph breadth-first-search

我对图表的基本广度优先搜索遍历的理解是:

BFS        
    Start from any node. 
    Add it to queue. 
    Add it to visited array.

    While queue is not empty:
        Remove head from queue; 
        Print node.

        add all unvisited direct subchilds to que; 
        mark them as visited  

但是,如果我们必须从给定节点遍历定向图形而不是所有节点都可以从给定节点(直接或间接)访问,那么我们如何使用BFS遍历图形这种情况?

你能否在这张图中解释一下:

a=> b => d => e => d  
a=> c => d

如果起始节点为b,我们绝不会打印ac

我在算法中遗漏了什么?

我使用HashMap<String, ArrayList> adj = new HashMap();来创建存储图的邻接列表。

2 个答案:

答案 0 :(得分:1)

  

但是,如果我们必须遍历给定节点的DIRECTED图,并且不是[直接或间接]从给定节点访问所有节点,我们如何使用BFS。

搜索算法遍历图表。如果您有无法遍历的边缘以及无法到达的节点,则搜索将无法找到它们。

答案 1 :(得分:0)

您的理解是正确的,除了以外的“从任何节点开始”部分 - BFS遍历必须从根节点开始。因此,在您的示例中,您将 以节点a开头,否则,正如您所说,您将永远不会访问它。