Java使用JGraphT创建有向图、无向图、权重图
在Java中使用JGraphT创建有向图、无向图、权重图的步骤如下:
1. 添加JGraphT依赖类库的Maven坐标。在pom.xml文件中添加以下依赖:
<dependency>
<groupId>org.jgrapht</groupId>
<artifactId>jgrapht-core</artifactId>
<version>1.6.0</version>
</dependency>
2. JGraphT简介:JGraphT是一个Java图类库,提供了丰富的图和图算法的实现。它支持创建有向图、无向图、加权图等,并提供了常见图算法,如最短路径、最小生成树、最大流等算法。
3. 创建有向图的示例:
import org.jgrapht.Graph;
import org.jgrapht.Graphs;
import org.jgrapht.graph.DefaultDirectedGraph;
import org.jgrapht.graph.DefaultEdge;
public class DirectedGraphExample {
public static void main(String[] args) {
// 创建有向图对象
Graph<String, DefaultEdge> directedGraph = new DefaultDirectedGraph<>(DefaultEdge.class);
// 添加顶点
directedGraph.addVertex("A");
directedGraph.addVertex("B");
directedGraph.addVertex("C");
// 添加边
directedGraph.addEdge("A", "B");
directedGraph.addEdge("B", "C");
// 输出图的顶点和边
System.out.println("顶点集合:" + directedGraph.vertexSet());
System.out.println("边集合:" + directedGraph.edgeSet());
}
}
4. 创建无向图的示例:
import org.jgrapht.Graph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;
public class UndirectedGraphExample {
public static void main(String[] args) {
// 创建无向图对象
Graph<String, DefaultEdge> undirectedGraph = new SimpleGraph<>(DefaultEdge.class);
// 添加顶点
undirectedGraph.addVertex("A");
undirectedGraph.addVertex("B");
undirectedGraph.addVertex("C");
// 添加边
undirectedGraph.addEdge("A", "B");
undirectedGraph.addEdge("B", "C");
// 输出图的顶点和边
System.out.println("顶点集合:" + undirectedGraph.vertexSet());
System.out.println("边集合:" + undirectedGraph.edgeSet());
}
}
5. 创建权重图的示例:
import org.jgrapht.Graph;
import org.jgrapht.graph.DefaultWeightedEdge;
import org.jgrapht.graph.SimpleWeightedGraph;
public class WeightedGraphExample {
public static void main(String[] args) {
// 创建权重图对象
Graph<String, DefaultWeightedEdge> weightedGraph = new SimpleWeightedGraph<>(DefaultWeightedEdge.class);
// 添加顶点
weightedGraph.addVertex("A");
weightedGraph.addVertex("B");
weightedGraph.addVertex("C");
// 添加带权重的边
DefaultWeightedEdge edge1 = weightedGraph.addEdge("A", "B");
weightedGraph.setEdgeWeight(edge1, 1.5);
DefaultWeightedEdge edge2 = weightedGraph.addEdge("B", "C");
weightedGraph.setEdgeWeight(edge2, 2.0);
// 输出图的顶点和边
System.out.println("顶点集合:" + weightedGraph.vertexSet());
System.out.println("边集合:" + weightedGraph.edgeSet());
System.out.println("边权重:" + weightedGraph.getEdgeWeight(edge1) + ", " + weightedGraph.getEdgeWeight(edge2));
}
}
总结:JGraphT是一个Java图类库,可以用来创建有向图、无向图和权重图,并提供了常见图算法的实现。通过添加相应的依赖类库,可以轻松地在Java中使用JGraphT。以上示例提供了创建有向图、无向图和权重图的完整Java代码。