有向图邻接矩阵c语言实现代码为什么需要保存顶点的数组
时间: 2024-01-03 14:05:08 浏览: 27
邻接矩阵是一种表示图的方式,将图中的顶点和边分别用矩阵中的行和列来表示。在使用邻接矩阵实现有向图时,需要保存顶点的数组,因为顶点的数组可以用来保存图中顶点的信息,如顶点的值、顶点的入度和出度等等。同时,邻接矩阵中的行和列都是用顶点的编号来表示的,因此需要顶点数组来映射顶点的编号和顶点的属性。在实现图的遍历和其他操作时,也需要通过顶点数组来获取顶点的相关信息。因此,顶点数组是邻接矩阵实现有向图的必要组成部分。
相关问题
有向图邻接矩阵c语言实现代码
以下是有向图邻接矩阵的 C 语言实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAX_VERTEX_NUM 100 // 最大顶点数
// 定义邻接矩阵结构体
typedef struct {
int vexs[MAX_VERTEX_NUM]; // 存放顶点的数组
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存放边的二维数组
int vexnum, arcnum; // 顶点数和边数
} MGraph;
// 初始化邻接矩阵
void InitMGraph(MGraph *G) {
int i, j;
printf("请输入顶点数和边数:");
scanf("%d%d", &G->vexnum, &G->arcnum);
printf("请输入顶点(顶点编号从 0 开始):\n");
for (i = 0; i < G->vexnum; i++) {
scanf("%d", &G->vexs[i]);
}
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
G->arcs[i][j] = 0; // 初始化边的权重为 0
}
}
printf("请输入边的信息(起点 终点):\n");
for (i = 0; i < G->arcnum; i++) {
int start, end;
scanf("%d%d", &start, &end);
G->arcs[start][end] = 1; // 将起点和终点的权重设为 1
}
}
// 打印邻接矩阵
void PrintMGraph(MGraph *G) {
int i, j;
printf("顶点:");
for (i = 0; i < G->vexnum; i++) {
printf("%d ", G->vexs[i]);
}
printf("\n邻接矩阵:\n");
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
printf("%d ", G->arcs[i][j]);
}
printf("\n");
}
}
int main() {
MGraph G;
InitMGraph(&G);
PrintMGraph(&G);
return 0;
}
```
有向图的邻接矩阵c语言代码
以下是有向图的邻接矩阵C语言代码:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXVEX 100 // 最大顶点数,可根据实际情况修改
typedef struct {
int vexs[MAXVEX]; // 存储顶点的数组
int matrix[MAXVEX][MAXVEX]; // 存储邻接矩阵的二维数组
int vexnum, edgenum; // 顶点数和边数
} MGraph;
// 创建有向图的邻接矩阵
void CreateMGraph(MGraph *G) {
int i, j, k, w;
printf("请输入顶点数和边数:\n");
scanf("%d%d", &G->vexnum, &G->edgenum);
printf("请输入顶点信息:\n");
for (i = 0; i < G->vexnum; i++) {
scanf("%d", &G->vexs[i]);
}
for (i = 0; i < G->vexnum; i++) {
for (j = 0; j < G->vexnum; j++) {
G->matrix[i][j] = 0; // 初始化邻接矩阵
}
}
printf("请输入边的信息:\n");
for (k = 0; k < G->edgenum; k++) {
printf("请输入边(vi, vj)的下标i、下标j和权值w:\n");
scanf("%d%d%d", &i, &j, &w);
G->matrix[i][j] = w; // 存储边的信息到邻接矩阵
}
}
// 打印邻接矩阵
void PrintMGraph(MGraph G) {
int i, j;
printf("邻接矩阵为:\n");
for (i = 0; i < G.vexnum; i++) {
for (j = 0; j < G.vexnum; j++) {
printf("%d ", G.matrix[i][j]);
}
printf("\n");
}
}
int main() {
MGraph G;
CreateMGraph(&G);
PrintMGraph(G);
return 0;
}
```