c语言文件读取邻接表
时间: 2023-12-21 13:31:22 浏览: 125
关键路径计算 C语言 邻接表实现.zip
以下是C语言文件读取邻接表的示例:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20
// 定义边表结点
typedef struct ArcNode {
int adjvex; // 邻接点域,存储该顶点对应的下标
struct ArcNode *nextarc; // 指向下一个邻接点的指针
// 如果有其他信息,可以继续添加
} ArcNode;
// 定义顶点表结点
typedef struct VNode {
int data; // 顶点信息
ArcNode *firstarc; // 指向第一个依附该顶点的边的指针
} VNode, AdjList[MAX_VERTEX_NUM];
// 定义邻接表
typedef struct {
AdjList vertices; // 邻接表
int vexnum, arcnum; // 顶点数和边数
} ALGraph;
// 从文件中读取邻接表
void ReadALGraphFromFile(ALGraph *G, char *filename) {
FILE *fp;
int i, j, k, n, m;
ArcNode *p;
if ((fp = fopen(filename, "r")) == NULL) {
printf("File open error!\n");
exit(0);
}
// 读取顶点数和边数
fscanf(fp, "%d %d", &G->vexnum, &G->arcnum);
// 读取顶点信息
for (i = 0; i < G->vexnum; i++) {
fscanf(fp, "%d", &G->vertices[i].data);
G->vertices[i].firstarc = NULL;
}
// 读取边的信息,建立边表
for (k = 0; k < G->arcnum; k++) {
fscanf(fp, "%d %d", &i, &j); // 读取边的两个顶点
p = (ArcNode *)malloc(sizeof(ArcNode));
p->adjvex = j;
p->nextarc = G->vertices[i].firstarc;
G->vertices[i].firstarc = p;
// 如果是无向图,还需要插入j到i的边
p = (ArcNode *)malloc(sizeof(ArcNode));
p->adjvex = i;
p->nextarc = G->vertices[j].firstarc;
G->vertices[j].firstarc = p;
}
fclose(fp);
}
```
阅读全文