c语言用文件操作实现有向图的邻接矩阵存储
时间: 2023-09-04 22:09:26 浏览: 91
邻接矩阵是一种常见的存储有向图的方式,可以使用文件操作进行存储和读取。下面是一个简单的示例程序,可以实现有向图的邻接矩阵存储。
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 20 // 最大顶点数
// 邻接矩阵结构体
typedef struct {
int vertex[MAX_VERTEX_NUM]; // 顶点数组
int arc[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 邻接矩阵
int vertex_num; // 顶点数量
} Graph;
// 初始化邻接矩阵
void initGraph(Graph *g) {
int i, j;
for (i = 0; i < MAX_VERTEX_NUM; i++) {
g->vertex[i] = 0;
for (j = 0; j < MAX_VERTEX_NUM; j++) {
g->arc[i][j] = 0;
}
}
}
// 读取有向图文件并存储到邻接矩阵中
void readGraphFile(const char *filename, Graph *g) {
FILE *fp;
int i, j, v;
fp = fopen(filename, "r");
if (fp == NULL) {
printf("File not found!\n");
exit(1);
}
fscanf(fp, "%d", &(g->vertex_num));
for (i = 0; i < g->vertex_num; i++) {
fscanf(fp, "%d", &(g->vertex[i]));
}
for (i = 0; i < g->vertex_num; i++) {
for (j = 0; j < g->vertex_num; j++) {
fscanf(fp, "%d", &v);
g->arc[i][j] = v;
}
}
fclose(fp);
}
// 打印邻接矩阵
void printGraph(Graph *g) {
int i, j;
printf("Vertex: ");
for (i = 0; i < g->vertex_num; i++) {
printf("%d ", g->vertex[i]);
}
printf("\n");
printf("Adjacency Matrix:\n");
for (i = 0; i < g->vertex_num; i++) {
for (j = 0; j < g->vertex_num; j++) {
printf("%d ", g->arc[i][j]);
}
printf("\n");
}
}
int main() {
Graph g;
initGraph(&g);
readGraphFile("graph.txt", &g);
printGraph(&g);
return 0;
}
```
假设有一个有向图文件 `graph.txt`,其内容如下:
```
5
1 2 3 4 5
0 1 0 0 0
0 0 1 0 0
1 0 0 1 0
0 0 0 1 1
0 0 0 0 1
```
程序会读取该文件并存储到邻接矩阵中,然后打印出邻接矩阵。运行该程序的输出结果如下:
```
Vertex: 1 2 3 4 5
Adjacency Matrix:
0 1 0 0 0
0 0 1 0 0
1 0 0 1 0
0 0 0 1 1
0 0 0 0 1
```
可以看到,邻接矩阵成功地存储了有向图的结构信息。
阅读全文