计算图表的总度数

时间:2013-11-22 02:01:38

标签: algorithm graph pseudocode

在有向图中,节点的总度数是进入它的边数加上走出它的边数。给出线性时间算法,该算法将有向图作为输入(以相邻列表格式,一如既往),并计算每个节点的总度。算法的输出应该是数组[。],每个节点都有一个条目。

这是我对这个问题的伪代码:

procedure total degree(G)
Input: Directed graph G=(V,E)
Output: array total[.] with an entry for each node

for all u in V in[u]=0
for all u in V:    
    for all (u,v) in E:
        in[v]=in[v]+1

for all u in V out[u]=0
for all u in V:
    for all (u,v) in E:
        out[u]=out[u]+1 

for all u in V total[u]=0
for all u in V:
    total[u]=in[v]+out[u]
return total[u]

有人可以同意我做对了或者告诉我如果我犯了错误我需要解决的问题,我真的不确定的是,如果我做了outdegrees(out [。])对

我使用此代码作为参考点来提出我自己的:

function sources(G)
Input: Directed graph G = (V;E)
Output: A list of G's source nodes
for all u in V : in[u] = 0
for all u in V :
    for all edges (u,w) in E:
        in[w] = in[w] + 1
L = empty linked list
for all u in V :
    if in[u] is 0: add u to L
return L 

1 个答案:

答案 0 :(得分:2)

您的第二个阻止与第一个相同,唯一的区别是数组名称。这意味着它将计算与第一个相同的边缘,从而给出错误的结果。

在你的第二个中,你需要计算另一个边缘,而不是相同的边缘:

for all u in V out[u]=0
for all u in V:
    for all (u,v) in E:
        out[v]=out[v]+1 

或者,你可以一次性计算它们:

假设输入G=(V,E)是节点列表(V)和节点对(E)表示的边缘列表((u, v)),并假设重复count,您需要做的就是计算边列表中的节点(out和in)。

for all u in V
    total[u] = 0

for all (u, v) in E
    total[u] = total[u] + 1
    total[v] = total[v] + 1

return total