JGraphT 是一个用于处理图数据结构和算法的 Java 库,提供了丰富的图类型和算法实现。
确保系统中已安装 Java 和 Maven。
使用 Spring Initializr 创建一个新的 Spring Boot 项目。
在 pom.xml
文件中添加 JGraphT 依赖。
<dependency>
<groupId>org.jgraphtgroupId>
<artifactId>jgrapht-coreartifactId>
<version>1.5.1version>
dependency>
顶点是图中的基本元素,表示图中的节点。
边连接两个顶点,表示顶点之间的关系。
简单图不允许重复边和自环。
多重图允许重复边,但不允许自环。
伪图允许重复边和自环。
确保 pom.xml
中已添加 JGraphT 依赖。
<dependency>
<groupId>org.jgraphtgroupId>
<artifactId>jgrapht-coreartifactId>
<version>1.5.1version>
dependency>
定义图数据结构并添加顶点和边。
import org.jgrapht.Graph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;
public class GraphExample {
public static void main(String[] args) {
// 创建一个简单的无向图
Graph<String, DefaultEdge> graph = new SimpleGraph<>(DefaultEdge.class);
// 添加顶点
String vertex1 = "A";
String vertex2 = "B";
String vertex3 = "C";
graph.addVertex(vertex1);
graph.addVertex(vertex2);
graph.addVertex(vertex3);
// 添加边
graph.addEdge(vertex1, vertex2);
graph.addEdge(vertex2, vertex3);
graph.addEdge(vertex3, vertex1);
// 打印图的顶点和边
System.out.println("Vertices: " + graph.vertexSet());
System.out.println("Edges: " + graph.edgeSet());
}
}
在 Spring Boot 应用中配置图数据结构。
import org.jgrapht.Graph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class GraphConfig {
@Bean
public Graph<String, DefaultEdge> graph() {
Graph<String, DefaultEdge> graph = new SimpleGraph<>(DefaultEdge.class);
// 添加顶点
String vertex1 = "A";
String vertex2 = "B";
String vertex3 = "C";
graph.addVertex(vertex1);
graph.addVertex(vertex2);
graph.addVertex(vertex3);
// 添加边
graph.addEdge(vertex1, vertex2);
graph.addEdge(vertex2, vertex3);
graph.addEdge(vertex3, vertex1);
return graph;
}
}
在图中添加和删除顶点。
import org.jgrapht.Graph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;
public class GraphOperations {
public static void main(String[] args) {
Graph<String, DefaultEdge> graph = new SimpleGraph<>(DefaultEdge.class);
// 添加顶点
graph.addVertex("A");
graph.addVertex("B");
// 删除顶点
graph.removeVertex("A");
System.out.println("Vertices: " + graph.vertexSet());
}
}
在图中添加和删除边。
import org.jgrapht.Graph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleGraph;
public class GraphOperations {
public static void main(String[] args) {
Graph<String, DefaultEdge> graph = new SimpleGraph<>(DefaultEdge.class);
// 添加顶点
graph.addVertex("A");
graph.addVertex("B");
// 添加边
graph.addEdge("A", "B");
// 删除边
graph.removeEdge("A", "B");
System.out.println("Edges: " + graph.edgeSet());
}
}
使用 JGraphT 提供的图算法。
使用 Dijkstra 算法计算最短路径。
import org.jgrapht.Graph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleWeightedGraph;
import org.jgrapht.alg.shortestpath.DijkstraShortestPath;
public class ShortestPathExample {
public static void main(String[] args) {
Graph<String, DefaultEdge> graph = new SimpleWeightedGraph<>(DefaultEdge.class);
// 添加顶点
graph.addVertex("A");
graph.addVertex("B");
graph.addVertex("C");
// 添加带权重的边
graph.setEdgeWeight(graph.addEdge("A", "B"), 1.0);
graph.setEdgeWeight(graph.addEdge("B", "C"), 2.0);
graph.setEdgeWeight(graph.addEdge("A", "C"), 4.0);
// 使用 Dijkstra 算法计算最短路径
DijkstraShortestPath<String, DefaultEdge> dijkstraAlg = new DijkstraShortestPath<>(graph);
System.out.println("Shortest path from A to C: " + dijkstraAlg.getPath("A", "C"));
}
}
使用 Kruskal 算法计算最小生成树。
import org.jgrapht.Graph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.graph.SimpleWeightedGraph;
import org.jgrapht.alg.spanning.KruskalMinimumSpanningTree;
public class MinimumSpanningTreeExample {
public static void main