返回有向图的源节点

时间:2013-11-01 05:22:28

标签: algorithm pseudocode

有向图中的源是没有边缘的节点。给出一个线性时间算法 将邻接列表格式的有向图作为输入,并输出所有源。

溶液:

查找有向图的来源。 我们将在[u]中保留一个数组,该数组保存每个节点的indegree(传入边数)。为一个 来源,这个值为零。

function sources(G)
Input: Directed graph G = (V,E)
Output: A list of G's source nodes
for all u ∈ V : in[u] = 0
for all u ∈ V :
    for all edges (u,w) ∈ E:
      in[w] = in[w] + 1

L = empty linked list
for all u ∈ V :
    if in[u] is 0: add u to L
return L

我对上面的代码特别不理解的是第一个代码块中最内层的for循环在[w] = [w] +1中的确切含义是什么意思?我认为这意味着它计算每个节点的不确定性,但它究竟是怎么做的我无法想象它,有人可以帮助我想象这个方面

1 个答案:

答案 0 :(得分:4)

in[w] = in[w] + 1会增加进入w的边数。

也许一个例子会有所帮助:

考虑一个简单的图表:

a ---> b

邻接列表表示为:

a: {b}
b: {}

现在算法将循环遍历所有顶点。

对于a,它会遍历边(a,b)并增加b的数量。

对于b,没有边缘。

现在a的计数仍为零,因此它是一个源顶点。