Java 用Kruskal算法求图的最小割值
我是一个初学者,我正在用Java中的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的边数 附:这是我的代码的一个片段:Java 用Kruskal算法求图的最小割值,java,kruskals-algorithm,minimum-cut,Java,Kruskals Algorithm,Minimum Cut,我是一个初学者,我正在用Java中的Kruskal算法寻找一个图的最小割 我已经到了可以读取输入并创建vertexCount ^2个MST的位置,边缘具有随机权重。我所要做的就是从我的MST中计算出分离S和V-S需要多少切割。这将允许我从vertexCount ^2个选择中选择最小数量 我想我正确地理解了,我应该忽略MST的最后一条边来获得S和V-S。但是我不知道如何计算有多少条边连接S和V-S 所以我的问题是:1 vertexCount ^2随机MST足以确信它将包含最小切割吗?2如何找到连接
// 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/ 编写代码时。从图形中获取MST时,我使用了Kruskal算法。这意味着我必须使用union和find方法 每个顶点在开始时都是自己的父顶点。当从图中获得不同组件的并集时,我将包含单例的组合组件分配给一个单亲。因此,当我剩下S和V-S时,每个组件的所有顶点都将具有相同的父级 因此,我返回我的EdgeWightEdgraph并迭代图中的所有边,而不是MST!。当我发现一条边的两个顶点具有不同的父节点时,这意味着该边连接组件S和V-S。每当我看到这样的边时,我都会计数+ 这给了我图形中需要的切割总数