문제

나는 모든 노드를 반복하려고 노력하므로 GraphViz를 위해 인쇄 할 수 있습니다. 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<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/. 더 많은 정보를 찾거나 더 쉬운 것을 찾으면 내가 당신을 도울 수 있기를 바랍니다.

PD : 영어에 대해 죄송합니다. 모든 것을 이해할 수 있기를 바랍니다.

사용하는 대신 DefaultEdge Aaron이 제공 한 코드에서 실제로 사용해야합니다. DefaultWeightedEdge

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top