考慮一個沒有周期的有向圖。我需要爲每個
u
找到從u
到達的邊的總權重(通過可達我們的意思是有從u
到一些v
的路徑)。現在如何找到從某個頂點到達的所有邊的總和?
,我想過運行拓撲排序,然後開始從最後一個節點到第一節點(可能通過交換邊緣的方向)
然後我們正在評估f[v] = f[u] + w(u,v)
運行。
但存在問題;對於該圖,我們將計數f[d]
兩次。我該如何克服這一點?
考慮一個沒有周期的有向圖。我需要爲每個
u
找到從u
到達的邊的總權重(通過可達我們的意思是有從u
到一些v
的路徑)。現在如何找到從某個頂點到達的所有邊的總和?
,我想過運行拓撲排序,然後開始從最後一個節點到第一節點(可能通過交換邊緣的方向)
然後我們正在評估f[v] = f[u] + w(u,v)
運行。
但存在問題;對於該圖,我們將計數f[d]
兩次。我該如何克服這一點?
您可以使用BFS或DFS來實現這一目標。
total = 0
dfs (node):
if visited[node] == 1:
return
visited[node] = 1
for all u connected to node:
total += weight[node][u]
dfs(u)
請注意,我們檢查total += weight[node][u]
後訪問。
您可以使用自下而上的方法。即首先計算每個頂點的outdegree,現在0 outdegree的頂點對它們的F [u] = 0。現在,添加所有這些頂點在隊列Q.
你也將需要存儲的圖的轉置,假設它是T.
While(!Q.empty){
u=Q.front();
Q.pop();
for all edges E originating from T[u]{
F[v]+=w; (where (u,v) was the edge with w as weight)
//now remove u from the graph
outdegree[v]--;
if(outdegree[v]==0)
Q.push(v);
}
}
,因爲通過到達我的意思是這是不正確「有從'u'路徑到'v'「。不必是鄰居。 – Elimination
那麼? DFS找到每個可到達的節點。問題中提到的圖表的答案是什麼?不是8嗎? – Tempux
我明白了。還有一件事,看起來你把total設爲全球。 – Elimination