前言
图是一种用于表示对象及其相互关系的数据结构。图由顶点(也称为节点)和边组成,边连接顶点,表示顶点之间的关系。根据边的方向性,图可以分为有向图和无向图。根据边的权重,图可以分为加权图和非加权图。
实现原理
邻接表(Adjacency List):
- 用一个数组或链表表示每个顶点的邻接顶点。
- 每个顶点都有一个链表(或列表),存储其所有邻接顶点。
- 优点:适合表示稀疏图,空间复杂度低,为 O(V+E)O(V + E)O(V+E),其中 VVV 是顶点数,EEE 是边数。
- 缺点:查找两个顶点之间是否存在边的时间复杂度为 O(V)O(V)O(V)(链表实现)或 O(logV)O(\log V)O(logV)(平衡树或哈希表实现)。
有一个简单的无向图
A - B - C
| |
D - E - F
动画过程
Depth-First Search Visualization
具体代码实现
import java.util.*;
class Graph {
private Map<String, List<String>> a