Попытка построить и визуализировать дерево Гомори-Ху, используя JGraphT и JGraphX - PullRequest
1 голос
/ 13 апреля 2019

Я пытаюсь построить и визуализировать дерево Гомори-Ху, используя 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
       ...
    }
...