如何在Java中获得max_weight_matching

问题描述

我有一个加权图和非二部图,并希望获得最大的权重匹配。我已经完成了python networkx库的任务,并正在寻找Java的替代库。我调查了JGraphT库,但找不到解决方案。

LoggerService

解决方法

这是使用JGraphT的解决方案:

Graph<Integer,DefaultWeightedEdge> g = new SimpleWeightedGraph<>(SupplierUtil.createIntegerSupplier(1),SupplierUtil.createDefaultWeightedEdgeSupplier());
Integer v1=g.addVertex();
Integer v2=g.addVertex();
Integer v3=g.addVertex();
Integer v4=g.addVertex();

Graphs.addEdge(g,v1,v2,30);
Graphs.addEdge(g,v3,100);
Graphs.addEdge(g,v4,0);
Graphs.addEdge(g,30);

MatchingAlgorithm<Integer,DefaultWeightedEdge> alg = new KolmogorovWeightedMatching<>(g,ObjectiveSense.MAXIMIZE);
System.out.println(alg.getMatching());

输出:

Matching [edges=[(1 : 3),(2 : 4)],weight=130.0]