我是一名初學者,我試圖用Java中的Kruskal算法找到圖的最小切割。使用Kruskal算法尋找圖的最小切割值
我已經到了我可以讀取輸入的位置,並創建vertexCount^2數量的邊緣隨機權重的MST。我所要做的就是從我的MST中找出需要多少次切割來分離S和V-S。這將允許我選擇vertexCount^2個選項中的最小值。
我想我理解正確,我應該忽略MST的最後一個邊緣來獲得S和V-S。但是我很難弄清楚有多少邊連接S和V-S。
所以我的問題是:1)是vertexCount^2隨機MST的足以確信它將包含最小切? 2)我怎樣才能找到有多少邊連接S和V-S?
PS。這是我的代碼片段形式:
// create weighted edge graph from input.txt
int vertexCount, edgeCount;
Edge edgeTemp;
vertexCount = s.nextInt();
edgeCount = s.nextInt();
EdgeWeightedGraph G = new EdgeWeightedGraph(vertexCount, edgeCount);
for (int j = 0; j < edgeCount; j++) {
edgeTemp = new Edge(s.nextInt(), s.nextInt(), new Random().nextInt(edgeCount));
G.addEdge(edgeTemp);
}
// create kruskal's mst from graph G
for (int j = 0; j < vertexCount*vertexCount; j++) {
KruskalMST mst = new KruskalMST(G);
for (Edge e : mst.edges()) {
System.out.println(e);
}
System.out.println(NEWLINE);
if (j != vertexCount*vertexCount - 2)
G.randomizeWeight(edgeCount);
}
PSS。如果這是相關的,我在編寫我的代碼時查看了http://algs4.cs.princeton.edu/43mst/的代碼。