私は初心者で、Java でクルスカルのアルゴリズムを使用してグラフの最小カットを見つけようとしています。
入力を読み取って、エッジのランダムな重みで vertexCount^2 個の MST を作成できる場所に到達しました。あとは、MST から、S と VS を分離するのに必要なカット数を計算するだけです。これにより、vertexCount^2 個の選択肢から最小のものを選択できます。
S と VS を取得するには、MST の最後のエッジを無視する必要があることを正しく理解していると思います。しかし、S と VS を接続しているエッジの数を把握する方法がわかりません。
したがって、私の質問は次のとおりです。2) S と VS を接続しているエッジの数を確認するにはどうすればよいですか?
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/のコードを見ました。