在计算机科学中,图(Graph)是一种非常重要的非线性数据结构,广泛应用于社交网络、地图导航、任务调度等领域。而加权图(Weighted Graph)则是在图的每条边上附加一个数值(即“权重”),用于表示距离、成本、时间等实际意义。本教程将带你用 Java 从零开始实现一个简单的加权图,并理解其核心概念。
普通图只关注节点之间是否相连,而加权图中的每条边都有一个权重值。例如,在地图应用中,城市是节点,道路是边,而道路长度或通行时间就是权重。

常见的图表示方法有两种:邻接矩阵和邻接表。对于稀疏图(边数远小于节点数平方),邻接表更节省空间,因此我们采用它来实现。
我们将使用以下结构:
Edge 类:表示一条带权重的边WeightedGraph 类:使用 Map<String, List<Edge>> 存储邻接表public class Edge { String destination; // 目标节点 int weight; // 边的权重 public Edge(String destination, int weight) { this.destination = destination; this.weight = weight; } @Override public String toString() { return destination + "(" + weight + ")"; }}import java.util.*;public class WeightedGraph { // 使用邻接表:节点名 -> 邻居列表 private Map<String, List<Edge>> adjList; public WeightedGraph() { adjList = new HashMap<>(); } // 添加节点(如果不存在) public void addVertex(String vertex) { adjList.putIfAbsent(vertex, new ArrayList<>()); } // 添加带权重的边(无向图) public void addEdge(String src, String dest, int weight) { // 确保两个节点都存在 addVertex(src); addVertex(dest); // 添加双向边 adjList.get(src).add(new Edge(dest, weight)); adjList.get(dest).add(new Edge(src, weight)); } // 打印整个图 public void printGraph() { for (String vertex : adjList.keySet()) { System.out.print(vertex + " -> "); for (Edge edge : adjList.get(vertex)) { System.out.print(edge + " "); } System.out.println(); } }}现在我们创建一个简单的图并测试它:
public class Main { public static void main(String[] args) { WeightedGraph graph = new WeightedGraph(); graph.addEdge("A", "B", 5); graph.addEdge("B", "C", 3); graph.addEdge("A", "C", 10); graph.printGraph(); }}输出结果:
A -> B(5) C(10) B -> A(5) C(3) C -> B(3) A(10)加权图的一个经典应用是求最短路径。Dijkstra 算法是解决单源最短路径问题的常用方法。虽然完整实现较复杂,但理解加权图是学习该算法的基础。
掌握 Java加权图 的构建后,你就可以进一步探索 最短路径算法、最小生成树(如 Prim 或 Kruskal 算法)等高级主题。
本教程详细讲解了如何用 Java 实现一个基于 邻接表 的加权图数据结构。我们定义了 Edge 和 WeightedGraph 类,并通过简单示例验证了其功能。这是学习图论算法(如 Dijkstra)的重要第一步。
无论你是准备面试,还是开发路径规划系统,理解 图数据结构 都至关重要。希望这篇面向初学者的教程能帮你打下坚实基础!
本文由主机测评网于2025-12-22发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://vpshk.cn/20251211616.html