有向图中的源是没有边缘的节点。给出一个线性时间算法 将邻接列表格式的有向图作为输入,并输出所有源。
溶液:
查找有向图的来源。 我们将在[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中的确切含义是什么意思?我认为这意味着它计算每个节点的不确定性,但它究竟是怎么做的我无法想象它,有人可以帮助我想象这个方面
答案 0 :(得分:4)
in[w] = in[w] + 1
会增加进入w
的边数。
也许一个例子会有所帮助:
考虑一个简单的图表:
a ---> b
邻接列表表示为:
a: {b}
b: {}
现在算法将循环遍历所有顶点。
对于a
,它会遍历边(a,b)
并增加b
的数量。
对于b
,没有边缘。
现在a
的计数仍为零,因此它是一个源顶点。