jgrapht 예제

다음은 지시된 그래프에서 강력하게 연결된 구성 요소 및 최단 경로 알고리즘을 실행하는 예입니다. 기본 순회 외에도 그래프에서 더 복잡한 알고리즘을 실행하는 것이 좋습니다. JGraphT는 이들 중 상당수를 제공하므로 org.jgrapht.alg 부모 패키지에 따라 분류됩니다. 예를 들어, 다양한 최단 경로 알고리즘은 org.jgrapht.alg.shortestpath에서 구현됩니다. JGraphT는 우리가 그래프의 시각화를 생성하고 이미지로 저장할 수 있습니다, 먼저 메이븐 센트럴에서 jgrapht-ext 확장 종속성을 추가 할 수 있습니다 : JGraphT는 또한 JGraphX의 데이터 모델로 JGraphT 그래프 인스턴스를 사용할 수있는 어댑터를 제공합니다 시각화. 다음 예제와 같이 jGraphT 그래프를 org.jgrapht.ext.JGraphXAdapter로 래핑하기만 하면 됩니다. 이를 위한 한 가지 방법은 위의 예제에서 DefaultDirectedGraph와 마찬가지로 그래프 인터페이스를 구현하는 구체적인 클래스를 인스턴스화하는 것입니다. 이렇게 하면 아래 표(또는 이들 중 고유한 하위 클래스)에서 선택할 수 있습니다. 다음으로 hello 월드 예제를 컴파일하고 실행해 보십시오. 동일한 문제에 사용할 수 있는 대체 알고리즘이 있는 경우, 공통성은 org.jgrapht.alg.interfaces의 인터페이스를 통해 추상화됩니다. 이렇게 하면 지정된 그래프 인스턴스에 대한 최적의 알고리즘 구현을 선택하는 응용 프로그램 코드를 쉽게 작성할 수 있습니다. 이를 해결하기 위해 JGraphT는 다양한 표준 형식으로 그래프를 내보내고 가져오기 위한 패키지 org.jgrapht.io 제공합니다.

다른 응용 프로그램과의 데이터 교환에도 사용할 수 있습니다. 그래프를 만든 후에는 깊이 우선, 너비 우선 또는 토폴로지와 같은 순서를 사용하여 그래프를 통과할 수 있습니다. JGraphT는 패키지 org.jgrapht.traverse를 통해 이를 제공합니다. 공통 인터페이스는 JGraphT 세부 사항과 일반 자바 이터레이터 인터페이스를 전문으로 GraphIterator입니다. 그래프 이터레이터는 요청된 순서로 정점을 생성합니다. 반복이 진행됨에 따라 TraversalListener를 등록하여 추가 정보(예: 특정 모서리가 트래버스되는 경우)를 얻을 수 있습니다. 통과 이벤트의 구체적인 의미는 이터레이터 유형에 따라 다릅니다. 기본 그래프 구현은 유지 관리하는 컬렉션에 대한 예측 가능한 순서를 보장합니다. 예를 들어 정점 [B, A, C] 순서를 추가하는 경우 정점 세트를 반복할 때 해당 순서로 정점을 볼 수 있습니다. 그러나 이것은 Graph 인터페이스의 요구 사항이 아니므로 다른 그래프 구현이 이를 준수하도록 보장되지는 않습니다. 다음은 HelloJGraphT 예제에서 깊이 우선 순서를 사용하는 예제입니다: 그래프빌더를 사용하여 연 그래프를 생성하는 예는 다음과 같습니다: JGraphT에서 그래프는 가장자리 집합으로 연결된 정점 집합으로 정의됩니다. 이 기본 정의에 대한 많은 가능한 변형이 지원됩니다.

하지만 지금은 방향 그래프를 만드는 간단한 예제를 살펴보겠습니다: 이것은 다른 데이터 구조 또는 시각화를 그래프 변경과 동기화하는 편리한 방법이 될 수 있습니다. 예를 들어 그래프가 시각화되는 CAD 모델을 나타낸다고 가정합니다. 그런 다음 그래프를 편집할 때마다 영향을 받는 모든 보기를 수신기 이벤트에서 자동으로 새로 고칠 수 있습니다.