当前位置:首页 > Java > 正文

Java语言无向图教程(从零开始掌握无向图的构建与操作)

在计算机科学中,图(Graph)是一种非常重要的非线性数据结构,广泛应用于社交网络、路径规划、推荐系统等领域。本文将带你从零开始,使用Java语言实现一个无向图(Undirected Graph),并掌握其基本操作。无论你是编程小白还是有一定经验的开发者,都能轻松理解。

什么是无向图?

无向图是由一组顶点(Vertices)和一组无序边(Edges)组成的图结构。每条边连接两个顶点,且没有方向。例如,A 和 B 之间有一条边,意味着你可以从 A 到 B,也可以从 B 到 A。

Java语言无向图教程(从零开始掌握无向图的构建与操作) Java无向图实现 无向图数据结构 Java图论基础 邻接表表示无向图 第1张

如何在 Java 中表示无向图?

常见的表示方法有两种:

  • 邻接矩阵(Adjacency Matrix):使用二维数组,适合稠密图。
  • 邻接表(Adjacency List):使用链表或 ArrayList 的数组,适合稀疏图,更节省空间。

本教程采用 邻接表 方式,这也是面试和实际开发中最常用的方法。

步骤一:定义图的基本结构

我们创建一个 UndirectedGraph 类,内部使用 HashMapArrayList 数组来存储每个顶点的邻居。

import java.util.*;public class UndirectedGraph {    private Map<Integer, List<Integer>> adjList;    // 构造函数    public UndirectedGraph() {        adjList = new HashMap<>();    }    // 添加顶点    public void addVertex(int vertex) {        adjList.putIfAbsent(vertex, new ArrayList<>());    }    // 添加无向边    public void addEdge(int v1, int v2) {        // 确保两个顶点都存在        addVertex(v1);        addVertex(v2);                // 互相添加邻居        adjList.get(v1).add(v2);        adjList.get(v2).add(v1);    }    // 打印图结构    public void printGraph() {        for (Map.Entry<Integer, List<Integer>> entry : adjList.entrySet()) {            System.out.println("顶点 " + entry.getKey() + " 的邻居: " + entry.getValue());        }    }}  

步骤二:测试你的无向图

现在我们写一个简单的 main 方法来测试这个图:

public class Main {    public static void main(String[] args) {        UndirectedGraph graph = new UndirectedGraph();                // 添加边(自动创建顶点)        graph.addEdge(1, 2);        graph.addEdge(1, 3);        graph.addEdge(2, 4);        graph.addEdge(3, 4);                // 打印图        graph.printGraph();    }}  

运行结果如下:

顶点 1 的邻居: [2, 3]顶点 2 的邻居: [1, 4]顶点 3 的邻居: [1, 4]顶点 4 的邻居: [2, 3]  

扩展功能:图的遍历

掌握了图的构建后,你还可以实现深度优先搜索(DFS)或广度优先搜索(BFS)。这里以 DFS 为例:

public void dfs(int startVertex) {    Set<Integer> visited = new HashSet<>();    dfsHelper(startVertex, visited);}private void dfsHelper(int vertex, Set<Integer> visited) {    visited.add(vertex);    System.out.print(vertex + " ");        for (int neighbor : adjList.getOrDefault(vertex, new ArrayList<>())) {        if (!visited.contains(neighbor)) {            dfsHelper(neighbor, visited);        }    }}  

总结

通过本教程,你已经学会了如何用 Java语言 实现一个基本的 无向图数据结构,包括添加顶点、添加边、打印图以及简单的深度优先遍历。这些是 Java图论基础 的核心内容,也是后续学习最短路径、最小生成树等高级算法的前提。

记住,掌握 邻接表表示无向图 是解决大多数图相关问题的第一步。多加练习,你就能轻松应对算法面试和实际项目中的图结构问题!

关键词回顾:Java无向图实现、无向图数据结构、Java图论基础、邻接表表示无向图