在计算机科学中,图(Graph)是一种非常重要的非线性数据结构,广泛应用于社交网络、路径规划、推荐系统等领域。本文将带你从零开始,使用Java语言实现一个无向图(Undirected Graph),并掌握其基本操作。无论你是编程小白还是有一定经验的开发者,都能轻松理解。
无向图是由一组顶点(Vertices)和一组无序边(Edges)组成的图结构。每条边连接两个顶点,且没有方向。例如,A 和 B 之间有一条边,意味着你可以从 A 到 B,也可以从 B 到 A。
常见的表示方法有两种:
本教程采用 邻接表 方式,这也是面试和实际开发中最常用的方法。
我们创建一个 UndirectedGraph 类,内部使用 HashMap 或 ArrayList 数组来存储每个顶点的邻居。
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图论基础、邻接表表示无向图
本文由主机测评网于2025-12-09发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025125144.html