给出邻接矩阵转换为邻接表的C代码
时间: 2023-01-29 16:43:51 浏览: 113
adjacency matrix.zip_adjacency matrix_matlab 邻接表_matlab邻接表_邻接矩阵
5星 · 资源好评率100%
好的,下面是使用 C 语言将邻接矩阵转换为邻接表的代码示例:
```
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20 // 最大顶点数
// 邻接矩阵存储的图
typedef struct {
int vertices[MAX_VERTEX_NUM]; // 顶点信息
int edges[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 边的信息
int vertexNum, edgeNum; // 图的顶点数和边数
} MatrixGraph;
// 邻接表存储的图
typedef struct AdjNode {
int vertex; // 邻接点信息
int weight; // 边的权值(如果是无权图,则设为 1)
struct AdjNode *next; // 指向下一个邻接点的指针
} AdjNode;
typedef struct {
AdjNode *adjList[MAX_VERTEX_NUM]; // 邻接表
int vertexNum, edgeNum; // 图的顶点数和边数
} ListGraph;
// 将邻接矩阵存储的图 graph 转换为邻接表存储的图并返回
ListGraph *matrixToList(MatrixGraph *graph) {
ListGraph *result = (ListGraph *)malloc(sizeof(ListGraph));
result->vertexNum = graph->vertexNum;
result->edgeNum = graph->edgeNum;
// 初始化邻接表
for (int i = 0; i < graph->vertexNum; i++) {
result->adjList[i] = NULL;
}
// 遍历邻接矩阵,将边信息加入邻接表
for (int i = 0; i < graph->vertexNum; i++) {
for (int j = 0; j < graph->vertexNum; j++) {
if (graph->edges[i][j] != 0) { // 如果有边
AdjNode *node = (AdjNode *)malloc(sizeof(AdjNode));
node->vertex = j;
node->weight = graph->edges[i][j];
阅读全文