邻接表和邻接矩阵java实现代码
时间: 2024-08-13 19:08:08 浏览: 31
邻接表和邻接矩阵是两种常见的图数据结构,在Java中可以这样实现:
**邻接表实现**:
邻接表用HashMap或LinkedList等数据结构存储,每个顶点(Vertex)对应一个链表,链表中的元素是与该顶点相连的所有边。
```java
import java.util.*;
class Vertex {
int id;
LinkedList<Vertex> adjacents; // 存储与该顶点相连的顶点
public Vertex(int id) {
this.id = id;
adjacents = new LinkedList<>();
}
}
class AdjacencyListGraph {
private Map<Integer, Vertex> vertices;
public AdjacencyListGraph() {
vertices = new HashMap<>();
}
public void addEdge(int srcId, int destId) {
if (!vertices.containsKey(srcId)) {
vertices.put(srcId, new Vertex(srcId));
}
vertices.get(srcId).adjacents.add(vertices.get(destId));
}
// 其他方法...
}
```
**邻接矩阵实现**:
邻接矩阵是一个二维数组,行代表起点,列代表终点,每个元素值表示两个顶点之间是否有边。如果两点间无边,值通常为0;如果有边,值为1或其他标识。
```java
class AdjacencyMatrixGraph {
private int[][] matrix; // 行和列分别代表顶点
public AdjacencyMatrixGraph(int numVertices) {
matrix = new int[numVertices][numVertices];
}
public void addEdge(int srcId, int destId) {
matrix[srcId][destId] = 1; // 或者其他非0值
}
// 获取某个顶点的所有相邻顶点,使用邻接矩阵的行/列
public List<Integer> getNeighbors(int vertexId) {
List<Integer> neighbors = new ArrayList<>();
for (int i = 0; i < matrix[vertexId].length; i++) {
if (matrix[vertexId][i] != 0) {
neighbors.add(i);
}
}
return neighbors;
}
// 其他方法...
}
```