Tôi có nhiệm vụ lập trình (không phải bài tập về nhà.) Nơi tôi phải tìm các cây cầu trong biểu đồ. Tôi đã làm việc trên nó một chút bản thân mình, nhưng không thể đưa ra bất cứ điều gì thỏa đáng. Vì vậy, tôi googled nó, tôi đã tìm thấy một cái gì đó nhưng tôi không thể hiểu các thuật toán như nó được trình bày. Ai đó có thể vui lòng xem mã này và cho tôi một lời giải thích.?Cầu trong đồ thị được kết nối
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]);
}
}
Bạn đang thiếu lớp Biểu đồ. Điều đó có sẵn ở đâu đó không? – jedwards
Tôi không đặt lớp biểu đồ ở đây. Tôi đang gặp rắc rối khi tìm hiểu về cách tìm cầu. Biểu đồ được thực hiện dưới dạng danh sách kề. – frodo
@jedwards, Lớp đồ thị là http://algs4.cs.princeton.edu/41undirected/Graph.java.html – Denis