Вопрос

Я пытаюсь перебрать все узлы, чтобы распечатать их для графвиза.Как лучше всего это сделать с помощью библиотеки JGraphT?

public static void main(String[] args) {
    UndirectedGraph<String, DefaultEdge> g = new SimpleWeightedGraph<String, DefaultEdge>(DefaultEdge.class);

    String odp = "ODP";
    String cck = "CCK";
    String mfe = "MFE";

    g.addVertex(odp);
    g.addVertex(cck);
    g.addVertex(mfe);

    g.addEdge(odp, cck);
    g.addEdge(odp, mfe);

}

Кроме того, как мне добавить вес ребер?

Редактировать: Кажется, это работает очень хорошо.Но есть ли лучший способ?

    Set<DefaultEdge> edges = g.edgeSet();

    for (DefaultEdge e : edges) {
        gv.addln(String.format("\"%s\" -> \"%s\"", g.getEdgeSource(e), g.getEdgeTarget(e)));            
    }
Это было полезно?

Решение

Попробуйте использовать WeightedGraph вместо UndirectedGraph (в ответ на ваш второй вопрос о добавлении весов):

WeightedGraph<String, DefaultEdge> g = new SimpleWeightedGraph<String, DefaultEdge>(DefaultEdge.class);

String odp = "ODP";
String cck = "CCK";
String mfe = "MFE";

g.addVertex(odp);
g.addVertex(cck);
g.addVertex(mfe);

DefaultEdge e1 = g.addEdge(odp, cck);
DefaultEdge e1 = g.addEdge(odp, mfe);

g.setEdgeWeight(e1, 10);
g.setEdgeWeight(e2, 4);

Другие советы

вы можете распечатать всю информацию графика с помощью функции toString() над вашим графиком, например, если у вас есть график h, вы можете сделать это:

System.out.println(h.toString());

Таким образом, вы увидите график в виде линии.С другой стороны, вы можете визуализировать график, присваивая координаты вершинам, например, с помощью вашего графика:

positionVertexAt(ODP, 130, 40);
positionVertexAt(CCK, 60, 20);
positionVertexAt(MFE, 240, 140);

Проблема в том, что вам нужно реализовать какую-то функцию, пример есть по этой ссылке. http://kickjava.com/src/org/jgrapht/demo/JGraphAdapterDemo.java.htm.

Я думаю, это немного сложно, но вы можете создать красивую графическую визуализацию.

Кроме того, вы можете использовать Интернет http://www.graphviz.org где вы можете отформатировать информацию вашего графика, как вы это уже делали, а затем программа построит график, как в этом примере, если вы наберете этот код (это код примера Интернета):

digraph finite_state_machine {
rankdir=LR;
size="8,5"
node [shape = doublecircle]; LR_0 LR_3 LR_4 LR_8;
node [shape = circle];
LR_0 -> LR_2 [ label = "SS(B)" ];
LR_0 -> LR_1 [ label = "SS(S)" ];
LR_1 -> LR_3 [ label = "S($end)" ];
LR_2 -> LR_6 [ label = "SS(b)" ];
LR_2 -> LR_5 [ label = "SS(a)" ];
LR_2 -> LR_4 [ label = "S(A)" ];
LR_5 -> LR_7 [ label = "S(b)" ];
LR_5 -> LR_5 [ label = "S(a)" ];
LR_6 -> LR_6 [ label = "S(b)" ];
LR_6 -> LR_5 [ label = "S(a)" ];
LR_7 -> LR_8 [ label = "S(b)" ];
LR_7 -> LR_5 [ label = "S(a)" ];
LR_8 -> LR_6 [ label = "S(b)" ];
LR_8 -> LR_5 [ label = "S(a)" ];

}

программа построит этот график: http://www.graphviz.org/content/fsm

Я пишу вам в сети здесь: http://www.graphviz.org/.Надеюсь, я смогу вам помочь, если найду больше информации или что-нибудь попроще, я вам расскажу.

Пд:Извините за мой английский, надеюсь, вы все поймете.

Вместо использования DefaultEdge в коде, данном Аароном, вам действительно следует использовать DefaultWeightedEdge

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top