邻接矩阵和邻接表的转换
时间: 2023-11-21 19:51:47 浏览: 89
数据结构学习--图的邻接矩阵和邻接表存储
邻接矩阵和邻接表是两种常见的图的存储方式。邻接矩阵是一个二维数组,其中行和列分别表示图中的节点,数组中的值表示节点之间的边的权重。而邻接表则是由每个节点的邻居列表组成的数组,每个邻居列表包含该节点的所有邻居节点及其对应的边的权重。
邻接矩阵和邻接表的转换可以通过以下步骤完成:
1. 邻接矩阵转邻接表:对于每个节点,遍历其所在行的所有列,如果该列的值不为0,则将该列所对应的节点及其权重添加到该节点的邻居列表中。
2. 邻接表转邻接矩阵:创建一个空的邻接矩阵,对于每个节点,遍历其邻居列表,将该节点与其邻居节点之间的边的权重添加到邻接矩阵中对应的位置。
下面是一个示例代码,将邻接矩阵转换成邻接表并输出,以及将邻接表转换成邻接矩阵并输出:
邻接矩阵转邻接表:
```
int[][] adjMatrix = {{0, 2, 0, 1}, {0, 0, 0, 4}, {3, 0, 0, 0}, {0, 0, 2, 0}};
List<List<int[]>> adjList = new ArrayList<>();
for (int i = 0; i < adjMatrix.length; i++) {
List<int[]> neighbors = new ArrayList<>();
for (int j = 0; j < adjMatrix[i].length; j++) {
if (adjMatrix[i][j] != 0) {
neighbors.add(new int[]{j, adjMatrix[i][j]});
}
}
adjList.add(neighbors);
}
System.out.println(adjList);
```
输出结果为:[[[1, 2], [3, 1]], [[3, 4]], [[0, 3]], [[2, 2]]]
邻接表转邻接矩阵:
```
List<List<int[]>> adjList = new ArrayList<>();
adjList.add(Arrays.asList(new int[]{1, 2}, new int[]{3, 1}));
adjList.add(Arrays.asList(new int[]{3, 4}));
adjList.add(Arrays.asList(new int[]{0, 3}));
adjList.add(Arrays.asList(new int[]{2, 2}));
int[][] adjMatrix = new int[adjList.size()][adjList.size()];
for (int i = 0; i < adjList.size(); i++) {
for (int[] neighbor : adjList.get(i)) {
adjMatrix[i][neighbor[0]] = neighbor[1];
}
}
System.out.println(Arrays.deepToString(adjMatrix));
```
输出结果为:[[0, 2, 0, 1], [0, 0, 0, 4], [3, 0, 0, 0], [0, 0, 2, 0]]
阅读全文