用c++编写程序,把邻接矩阵转换为邻接表
时间: 2024-12-21 18:21:20 浏览: 47
在C++中,将邻接矩阵转换为邻接表是一种常见的操作,特别是在图算法中,因为邻接表更利于频繁地添加、删除边。以下是基本步骤:
1. 定义邻接表结构:对于无向图,可以创建一个动态数组,每个元素是一个vector,存储与该顶点相邻的所有顶点。如果是有向图,则可以使用pair,第一个元素是起点,第二个元素是终点。
```cpp
#include <vector>
using namespace std;
// 如果是无向图
typedef vector<vector<int>> AdjacencyList; // 或者使用list<int> for better performance
// 对于有向图
typedef pair<int, int> Edge;
vector<Edge> DirectedAdjacencyList[vertices]; // vertices表示顶点总数
```
2. 遍历邻接矩阵:从矩阵的每一个元素开始,将其对应的两个顶点加入邻接列表中。例如,如果matrix[i][j] != 0,那么顶点i和顶点j之间有一条边。
```cpp
for (int i = 0; i < matrix.size(); ++i) {
for (int j = 0; j < matrix[i].size(); ++j) {
if (matrix[i][j] > 0) {
// 添加无向边到邻接表
AdjacencyList[i].push_back(j);
AdjacencyList[j].push_back(i); // 无向图需要双向添加
// 或者添加有向边到邻接表
DirectedAdjacencyList[i].emplace_back(j);
}
}
}
```
3. 最后,邻接表就准备好了,你可以通过访问AdjacencyList[i]或DirectedAdjacencyList[i]来获取顶点i的邻居列表。
阅读全文
相关推荐


















