图的邻接表转化成邻接矩阵
时间: 2023-09-06 07:07:48 浏览: 104
邻接表转化成邻接矩阵的步骤如下:
1. 统计节点数量,即图中顶点的个数n。
2. 创建一个n×n的邻接矩阵A,初始值都为0。
3. 对于邻接表中的每一个节点,将其边所连接的节点在邻接矩阵中标记为1。
4. 如果图是无向图,那么在邻接矩阵中对称标记,即A[i][j]=A[j][i]。
5. 邻接矩阵构建完成。
需要注意的是,邻接表中的节点编号可能不是从0到n-1连续的,因此在转换时需要进行编号的映射。
相关问题
c++设计算法将无向图邻接矩阵转换为邻接表,将邻接表转换为邻接矩阵
将无向图的邻接矩阵转换为邻接表,可以遍历整个矩阵,对于每个非零元素,将其所在的行和列分别对应到邻接表中的一个顶点,然后在这两个顶点的邻接表中分别添加对方作为相邻节点的边。具体实现代码如下:
```c++
#include <iostream>
#include <vector>
using namespace std;
vector<vector<int>> matrixToAdjList(vector<vector<int>> matrix) {
int n = matrix.size();
vector<vector<int>> adjList(n);
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (matrix[i][j] != 0) {
adjList[i].push_back(j);
adjList[j].push_back(i);
}
}
}
return adjList;
}
```
将邻接表转换为邻接矩阵,可以先遍历邻接表中的所有顶点,对于每个顶点,遍历其邻接表中的节点,将其对应的邻接矩阵位置设为1。具体实现代码如下:
```c++
vector<vector<int>> adjListToMatrix(vector<vector<int>> adjList) {
int n = adjList.size();
vector<vector<int>> matrix(n, vector<int>(n, 0));
for (int i = 0; i < n; i++) {
for (int j : adjList[i]) {
matrix[i][j] = 1;
matrix[j][i] = 1;
}
}
return matrix;
}
```
以上是将无向图的邻接矩阵转换为邻接表,以及将邻接表转换为邻接矩阵的具体实现代码,您可以根据实际情况进行调整。
邻接表转化成邻接矩阵
邻接表转化为邻接矩阵的算法思想如下:
1. 首先初始化邻接矩阵,将所有元素置为0。
2. 遍历邻接表,对于每个顶点vertices[i],依次遍历其边链表。
3. 若边链表中的边结点的值为j,则将邻接矩阵的第i行第j列的元素置为1。
4. 遍历完邻接表后,转换过程结束。
以下是一个示例代码,演示了邻接表转化为邻接矩阵的过程:
```c++
void table_convert_matrix(MGraph &G1, ALGraph G2) {
G1.arcnum = G2.arcnum;
G1.vexnum = G2.vexnum;
// 初始化邻接矩阵
for(int i = 1; i <= G1.vexnum; i++) {
for(int j = 1; j <= G1.vexnum; j++) {
G1.Edge[i][j] = 0;
}
}
ArcNode *p;
for(int i = 1; i <= G2.vexnum; i++) {
// 依次遍历各顶点表结点为头的边链表
p = G2.vertices[i].first;
// 取出顶点 i 的第一条出边
while(p) {
// 遍历边链表
G1.Edge[i][p->adjvex] = 1;
p = p->next; // 取出下一条出边
}
}
}
```
阅读全文