c语言写出从图的邻接表表示转换成邻接矩阵表示的算法
时间: 2023-12-12 10:03:37 浏览: 101
以下是将图的邻接表表示转换为邻接矩阵表示的C语言算法示例:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义图的最大顶点数
#define MAX_VERTEX_NUM 100
// 邻接表结点
typedef struct ArcNode {
int adjvex; // 邻接点下标
struct ArcNode* nextarc; // 指向下一个邻接点的指针
} ArcNode;
// 顶点表结点
typedef struct {
int data; // 顶点信息
ArcNode* firstarc; // 指向第一个邻接点
} VNode;
// 图结构
typedef struct {
VNode vertices[MAX_VERTEX_NUM]; // 顶点表
int vexnum; // 顶点数
int arcnum; // 边数
} Graph;
// 初始化图
void initGraph(Graph* G, int vexnum) {
G->vexnum = vexnum;
G->arcnum = 0;
for (int i = 0; i < vexnum; i++) {
G->vertices[i].data = i;
G->vertices[i].firstarc = NULL;
}
}
// 添加边
void addEdge(Graph* G, int v1, int v2) {
ArcNode* arcNode = (ArcNode*)malloc(sizeof(ArcNode));
arcNode->adjvex = v2;
arcNode->nextarc = G->vertices[v1].firstarc;
G->vertices[v1].firstarc = arcNode;
G->arcnum++;
}
// 邻接表转换为邻接矩阵
void convertToMatrix(Graph* G, int matrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]) {
for (int i = 0; i < G->vexnum; i++) {
ArcNode* arcNode = G->vertices[i].firstarc;
while (arcNode != NULL) {
matrix[i][arcNode->adjvex] = 1;
arcNode = arcNode->nextarc;
}
}
}
// 打印邻接矩阵
void printMatrix(Graph* G, int matrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]) {
printf("Adjacency Matrix:\n");
for (int i = 0; i < G->vexnum; i++) {
for (int j = 0; j < G->vexnum; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
}
int main() {
int vexnum = 5; // 顶点数
Graph G;
initGraph(&G, vexnum);
// 添加边
addEdge(&G, 0, 1);
addEdge(&G, 0, 2);
addEdge(&G, 1, 3);
addEdge(&G, 2, 1);
addEdge(&G, 2, 3);
addEdge(&G, 3, 4);
// 创建邻接矩阵
int matrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM] = {0};
convertToMatrix(&G, matrix);
// 打印邻接矩阵
printMatrix(&G, matrix);
return 0;
}
```
这个算法将图的邻接表表示转换为邻接矩阵表示。可以根据需要修改顶点数、添加边以及其他操作。注意这里的图是有向图,如果需要处理无向图,可以在添加边时同时添加反向的边。
阅读全文