我有一個編程任務(不是家庭作業),我必須在圖中找到網橋。我自己做了一些工作,但不能滿足任何需求。所以我GOOGLE了它,我找到了一些東西,但我無法理解算法,因爲它是呈現。有人可以看看這段代碼,並給我一個解釋。?連接圖中的網橋
public Bridge(Graph G) {
low = new int[G.V()];
pre = new int[G.V()];
for (int v = 0; v < G.V(); v++) low[v] = -1;
for (int v = 0; v < G.V(); v++) pre[v] = -1;
for (int v = 0; v < G.V(); v++)
if (pre[v] == -1)
dfs(G, v, v);
}
public int components() { return bridges + 1; }
private void dfs(Graph G, int u, int v) {
pre[v] = cnt++;
low[v] = pre[v];
for (int w : G.adj(v)) {
if (pre[w] == -1) {
dfs(G, v, w);
low[v] = Math.min(low[v], low[w]);
if (low[w] == pre[w]) {
StdOut.println(v + "-" + w + " is a bridge");
bridges++;
}
}
// update low number - ignore reverse of edge leading to v
else if (w != u)
low[v] = Math.min(low[v], pre[w]);
}
}
您錯過了Graph類。這是否可用? – jedwards
我沒有在這裏放圖類。我很難理解如何找到橋樑。該圖形是作爲一個鄰接表實現的。 – frodo
@jedwards,圖表類是http://algs4.cs.princeton.edu/41undirected/Graph.java.html – Denis