You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java环境下Jgrapht库使用指导及导入报错(package不存在)咨询

问题一:解决JGraphT导入报错 Error:(7, 1) java: package org.jgrapht.graph does not exist

这个报错的核心是你的Java项目没有正确引入JGraphT的依赖包,导致编译器找不到对应的类路径。根据你使用的构建工具,分三种场景处理:

1. Maven构建项目

在项目的pom.xml中添加JGraphT核心依赖,建议使用最新稳定版本(比如1.5.1):

<dependency>
    <groupId>org.jgrapht</groupId>
    <artifactId>jgrapht-core</artifactId>
    <version>1.5.1</version>
</dependency>

添加后执行mvn clean install,让Maven自动下载依赖包,重新编译项目后报错即可消失。

2. Gradle构建项目

在build.gradle的dependencies块中加入:

implementation 'org.jgrapht:jgrapht-core:1.5.1'

执行gradle build或点击IDE的同步按钮,Gradle会自动拉取并配置依赖。

3. 手动导入JAR包(不推荐,易引发依赖冲突)

  • 下载JGraphT核心JAR包(如jgrapht-core-1.5.1.jar)
  • 在IDE中添加到类路径:
    • IntelliJ:右键项目 → 打开模块设置 → 库 → 点击+号导入JAR
    • Eclipse:右键项目 → Build Path → Add External Archives...

问题二:如何使用JGraphT库

解决依赖问题后,我们从基础操作入手,用实例演示核心功能:

1. 创建基础无向图

JGraphT支持多种图类型,先从最简单的无向图开始:

import org.jgrapht.graph.DefaultUndirectedGraph;
import org.jgrapht.graph.DefaultEdge;

public class JGraphTDemo {
    public static void main(String[] args) {
        // 初始化无向图,顶点为String类型,边用默认的DefaultEdge
        DefaultUndirectedGraph<String, DefaultEdge> graph = new DefaultUndirectedGraph<>(DefaultEdge.class);
        
        // 添加顶点
        graph.addVertex("Alice");
        graph.addVertex("Bob");
        graph.addVertex("Charlie");
        
        // 添加边(连接顶点)
        graph.addEdge("Alice", "Bob");
        graph.addEdge("Bob", "Charlie");
        graph.addEdge("Alice", "Charlie");
        
        // 打印图的基本信息
        System.out.println("顶点数量:" + graph.vertexSet().size());
        System.out.println("边数量:" + graph.edgeSet().size());
    }
}

2. 遍历顶点与边

通过内置方法可以轻松遍历图的所有元素:

// 遍历顶点
System.out.println("\n所有顶点:");
for (String vertex : graph.vertexSet()) {
    System.out.println("- " + vertex);
}

// 遍历边并获取两端顶点
System.out.println("\n所有边:");
for (DefaultEdge edge : graph.edgeSet()) {
    String source = graph.getEdgeSource(edge);
    String target = graph.getEdgeTarget(edge);
    System.out.println("- " + source + " ↔ " + target);
}

3. 构建加权图

如果需要带权重的边,可使用DefaultWeightedEdge和SimpleWeightedGraph:

import org.jgrapht.graph.SimpleWeightedGraph;
import org.jgrapht.graph.DefaultWeightedEdge;

// 初始化加权无向图
SimpleWeightedGraph<String, DefaultWeightedEdge> weightedGraph = new SimpleWeightedGraph<>(DefaultWeightedEdge.class);

weightedGraph.addVertex("A");
weightedGraph.addVertex("B");
weightedGraph.addVertex("C");

// 添加带权重的边
DefaultWeightedEdge edgeAB = weightedGraph.addEdge("A", "B");
weightedGraph.setEdgeWeight(edgeAB, 5.0);

DefaultWeightedEdge edgeBC = weightedGraph.addEdge("B", "C");
weightedGraph.setEdgeWeight(edgeBC, 3.0);

// 获取边的权重
System.out.println("A到B的权重:" + weightedGraph.getEdgeWeight(edgeAB));

4. 使用内置图算法

JGraphT封装了大量经典算法,比如Dijkstra最短路径:

import org.jgrapht.alg.shortestpath.DijkstraShortestPath;
import java.util.List;

// 基于上面的加权图执行Dijkstra算法
DijkstraShortestPath<String, DefaultWeightedEdge> dijkstra = new DijkstraShortestPath<>(weightedGraph);
List<DefaultWeightedEdge> shortestPath = dijkstra.getPath("A", "C").getEdgeList();

// 打印最短路径
System.out.println("\nA到C的最短路径:");
for (DefaultWeightedEdge edge : shortestPath) {
    String source = weightedGraph.getEdgeSource(edge);
    String target = weightedGraph.getEdgeTarget(edge);
    System.out.println("- " + source + " → " + target + " (权重:" + weightedGraph.getEdgeWeight(edge) + ")");
}

内容的提问来源于stack exchange,提问作者Mohammad Tamannaei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:36:00