C语言 写代码在邻接矩阵存储结构上实现图的基本操作: InsertVex(G,v),InsertArc(G,v,w),DeleteVex(G,v)和 DeleteArc(G,v,w)。
时间: 2023-09-20 10:08:13 浏览: 100
用C语言实现图的基本操作
5星 · 资源好评率100%
好的,以下是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; // 顶点数和边数
} GraphMatrix;
// 初始化图
void InitGraph(GraphMatrix *G) {
int i, j;
G->vexnum = G->arcnum = 0;
for (i = 0; i < MAX_VERTEX_NUM; i++) {
for (j = 0; j < MAX_VERTEX_NUM; j++) {
G->arcs[i][j] = 0;
}
}
}
// 插入顶点
void InsertVex(GraphMatrix *G, int v) {
G->vexs[G->vexnum++] = v;
}
// 插入边
void InsertArc(GraphMatrix *G, int v, int w) {
int i, j;
for (i = 0; i < G->vexnum; i++) {
if (G->vexs[i] == v) break;
}
for (j = 0; j < G->vexnum; j++) {
if (G->vexs[j] == w) break;
}
G->arcs[i][j] = G->arcs[j][i] = 1;
G->arcnum++;
}
// 删除顶点
void DeleteVex(GraphMatrix *G, int v) {
int i, j;
for (i = 0; i < G->vexnum; i++) {
if (G->vexs[i] == v) break;
}
for (j = 0; j < G->vexnum; j++) {
if (G->arcs[i][j]) {
G->arcs[i][j] = G->arcs[j][i] = 0;
G->arcnum--;
}
}
for (; i < G->vexnum - 1; i++) {
G->vexs[i] = G->vexs[i + 1];
}
G->vexnum--;
}
// 删除边
void DeleteArc(GraphMatrix *G, int v, int w) {
int i, j;
for (i = 0; i < G->vexnum; i++) {
if (G->vexs[i] == v) break;
}
for (j = 0; j < G->vexnum; j++) {
if (G->vexs[j] == w) break;
}
G->arcs[i][j] = G->arcs[j][i] = 0;
G->arcnum--;
}
// 测试代码
int main() {
GraphMatrix G;
InitGraph(&G);
// 插入顶点
InsertVex(&G, 1);
InsertVex(&G, 2);
InsertVex(&G, 3);
InsertVex(&G, 4);
// 插入边
InsertArc(&G, 1, 2);
InsertArc(&G, 1, 3);
InsertArc(&G, 2, 4);
InsertArc(&G, 3, 4);
// 删除顶点和边
DeleteVex(&G, 3);
DeleteArc(&G, 1, 2);
return 0;
}
```
以上是实现邻接矩阵存储结构上的图基本操作的C语言代码,其中包括插入顶点、插入边、删除顶点和删除边四个基本操作。
阅读全文