Java 用Kruskal算法求图的最小割值

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如何找到连接

我是一个初学者,我正在用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的边数

附:这是我的代码的一个片段:

            // 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。每当我看到这样的边时,我都会计数+

这给了我图形中需要的切割总数