В ориентированном графе общая степень узла - это количество ребер, входящих в него, плюс количество ребер, выходящих из него. Дайте алгоритм линейного времени, который принимает в качестве входного ориентированного графа (в формате списка смежности, как всегда), и вычисляет общую степень каждого узла. Вывод алгоритма должен быть массивом total [.], С записью для каждого узла.подсчет общих степеней графа
это мой псевдо-код для этой проблемы:
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 ([.] из) право
я использовал этот код в качестве опорной точки, чтобы придумать мой собственный:
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
Это правильно. =) – justhalf
На самом деле нет внутреннего для цикла его всего лишь одного цикла, я просто написал его так, потому что так это делает моя книга. позвольте мне попытаться объяснить в блоке [.] for-loop псевдокода. Сначала алгоритм просматривает все узлы (| V |), которые я представляю как u, и назначает массив в [u], который подсчитывает все градусы (все направленные ребра, входящие в узел). он проходит через каждое ребро, начинающееся с u, и подсчитывает все числа в градусах, которые имеют u для каждого u, так как u - это просто переменная, представляющая узел – notamathwiz