Я пытаюсь построить и визуализировать дерево Гомори-Ху, используя JGraphT
и JGraphX
.Читая учебники или другие вопросы, мне удалось реализовать простой взвешенный граф и получившееся дерево Гомори-Ху.Теперь я хочу визуализировать получающееся дерево.Я видел людей, использующих JGraphX для этого, однако мне не удается заставить это работать на меня.
К сожалению, мои навыки программирования не настолько впечатляющие, поэтому я заранее извиняюсь, если кто-либо измои вопросы / проблемы кажутся немного глупыми:)
Я видел других людей, использующих JGraphXAdapter
и Listenable Objects для визуализации графиков, но я даже не могу импортировать эти классы ("import... не может быть решен").Кроме того, моя проблема заключается в том, что с помощью функции / класса Gomory-Hu Tree, предоставляемой JGraphT, я получаю экземпляр класса GusfieldGomoryHuCutTree, но для использования JGraphX мне нужен граф Listenable (по крайней мере, я так думаю).
Эти два не работают
import org.jgrapht.ext.JGraphXAdapter;
import org.jgrapht.graph.ListenableDirectedWeightedGraph;
public static void main(String[] args)
{
Graph<String, DefaultWeightedEdge> bsp = new SimpleWeightedGraph<>(DefaultWeightedEdge.class); //of that kind is my graph right now
GusfieldGomoryHuCutTree<String, DefaultWeightedEdge> tree = new GusfieldGomoryHuCutTree(bsp);
SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGui();
}
}); //found at a different question
}
private static void createAndShowGui() {
JFrame frame = new JFrame("DemoGraph");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ListenableGraph<String, MyEdge> g = buildGraph();
JGraphXAdapter<String, MyEdge> graphAdapter =
new JGraphXAdapter<String, MyEdge>(g);
//cant import that Adapter
mxIGraphLayout layout = new mxCircleLayout(graphAdapter);
layout.execute(graphAdapter.getDefaultParent());
frame.add(new mxGraphComponent(graphAdapter));
frame.pack();
frame.setLocationByPlatform(true);
frame.setVisible(true);
}
public static class MyEdge extends DefaultWeightedEdge {
@Override
public String toString() {
return String.valueOf(getWeight());
}
}
public static ListenableGraph<String, MyEdge> buildGraph() {
ListenableDirectedWeightedGraph<String, MyEdge> g =
new ListenableDirectedWeightedGraph<String, MyEdge>(MyEdge.class);
//doesnt work because I can't import that listenable class, want to make my original graph like that
...
}