用c语言写一个图的创建,用邻接矩阵或者邻接表
时间: 2024-02-17 22:02:06 浏览: 80
数据结构-c语言-带main函数-图7.2-图的存储结构-图的邻接表的创建-无向图。
5星 · 资源好评率100%
好的,以下是使用邻接矩阵和邻接表实现图的创建的 C 语言代码示例:
### 邻接矩阵
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXVEX 100 // 最大顶点数
// 定义邻接矩阵结构体
typedef struct {
int vexs[MAXVEX]; // 存储顶点数据
int arcs[MAXVEX][MAXVEX]; // 存储边的关系,即邻接矩阵
int num_vexs; // 顶点数
int num_arcs; // 边数
} MGraph;
// 创建邻接矩阵图
void CreateMGraph(MGraph *G) {
int i, j, k, w;
printf("请输入顶点数和边数:\n");
scanf("%d%d", &G->num_vexs, &G->num_arcs);
// 初始化邻接矩阵
for (i = 0; i < G->num_vexs; i++) {
for (j = 0; j < G->num_vexs; j++) {
G->arcs[i][j] = 0;
}
}
// 输入顶点数据
printf("请输入顶点数据:\n");
for (i = 0; i < G->num_vexs; i++) {
scanf("%d", &G->vexs[i]);
}
// 输入边的关系,即邻接矩阵
printf("请输入边的关系,格式为:i j w,表示顶点 i 和 j 之间有一条权值为 w 的边:\n");
for (k = 0; k < G->num_arcs; k++) {
scanf("%d%d%d", &i, &j, &w);
G->arcs[i][j] = w;
G->arcs[j][i] = w; // 无向图需要将矩阵对称
}
}
// 打印邻接矩阵图
void PrintMGraph(MGraph G) {
int i, j;
printf("顶点数据如下:\n");
for (i = 0; i < G.num_vexs; i++) {
printf("%d ", G.vexs[i]);
}
printf("\n");
printf("边的关系,即邻接矩阵如下:\n");
for (i = 0; i < G.num_vexs; i++) {
for (j = 0; j < G.num_vexs; j++) {
printf("%d ", G.arcs[i][j]);
}
printf("\n");
}
}
int main() {
MGraph G;
CreateMGraph(&G);
PrintMGraph(G);
return 0;
}
```
### 邻接表
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXVEX 100 // 最大顶点数
// 定义邻接表结构体
typedef struct ArcNode {
int adjvex; // 邻接点下标
int weight; // 边的权值
struct ArcNode *next; // 指向下一条边的指针
} ArcNode;
typedef struct VNode {
int data; // 顶点数据
ArcNode *firstarc; // 指向第一条边的指针
} VNode, AdjList[MAXVEX];
typedef struct {
AdjList vertices; // 邻接表
int num_vexs; // 顶点数
int num_arcs; // 边数
} ALGraph;
// 创建邻接表图
void CreateALGraph(ALGraph *G) {
int i, j, k, w;
printf("请输入顶点数和边数:\n");
scanf("%d%d", &G->num_vexs, &G->num_arcs);
// 初始化邻接表
for (i = 0; i < G->num_vexs; i++) {
G->vertices[i].data = i;
G->vertices[i].firstarc = NULL;
}
// 输入边的关系,即邻接表
printf("请输入边的关系,格式为:i j w,表示顶点 i 和 j 之间有一条权值为 w 的边:\n");
for (k = 0; k < G->num_arcs; k++) {
scanf("%d%d%d", &i, &j, &w);
ArcNode *arc = (ArcNode *)malloc(sizeof(ArcNode));
arc->adjvex = j;
arc->weight = w;
arc->next = G->vertices[i].firstarc;
G->vertices[i].firstarc = arc;
arc = (ArcNode *)malloc(sizeof(ArcNode));
arc->adjvex = i;
arc->weight = w;
arc->next = G->vertices[j].firstarc;
G->vertices[j].firstarc = arc;
}
}
// 打印邻接表图
void PrintALGraph(ALGraph G) {
int i;
ArcNode *arc;
printf("顶点数据和边的关系,即邻接表如下:\n");
for (i = 0; i < G.num_vexs; i++) {
printf("%d: ", G.vertices[i].data);
arc = G.vertices[i].firstarc;
while (arc) {
printf("%d(%d) ", arc->adjvex, arc->weight);
arc = arc->next;
}
printf("\n");
}
}
int main() {
ALGraph G;
CreateALGraph(&G);
PrintALGraph(G);
return 0;
}
```
阅读全文