试在邻接矩阵存储结构上实现图的基本操作InsertVex(G,v);InsertArc(G,v,w);DeleteVex(G,v);DeleteArc(G,v,w)
时间: 2023-03-20 14:01:22 浏览: 108
C++ 邻接矩阵
邻接矩阵是一种常用的图的存储结构,其中矩阵的行表示图中的顶点,列表示图中的边,矩阵元素的值表示该边的权重。在这种存储结构中,插入和删除顶点和边的操作可以通过修改矩阵元素来实现。
以下是邻接矩阵存储结构上实现图的基本操作的伪代码:
```
// 定义邻接矩阵存储结构
#define MAX_VERTEX_NUM 100
typedef struct {
int vexs[MAX_VERTEX_NUM]; // 存储顶点信息
int arcs[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; // 存储边的信息
int vexnum, arcnum; // 图的顶点数和边数
} MGraph;
// 插入顶点操作
Status InsertVex(MGraph *G, VertexType v) {
// 判断是否超过最大顶点数
if (G->vexnum >= MAX_VERTEX_NUM) {
return ERROR;
}
// 添加新顶点
G->vexs[G->vexnum] = v;
G->vexnum++;
// 初始化新顶点的关联边信息
for (int i = 0; i < G->vexnum; i++) {
G->arcs[G->vexnum-1][i] = 0;
G->arcs[i][G->vexnum-1] = 0;
}
return OK;
}
// 插入边操作
Status InsertArc(MGraph *G, VertexType v, VertexType w) {
// 查找顶点 v 和 w 的位置
int v_pos = LocateVex(G, v);
int w_pos = LocateVex(G, w);
if (v_pos == -1 || w_pos == -1) {
return ERROR;
}
// 添加新边
G->arcs[v_pos][w_pos] = 1; // 如果是有权图,可以赋予边权值
G->arcnum++;
return OK;
}
// 删除顶点操作
Status DeleteVex(MGraph *G, VertexType v) {
// 查找顶点 v 的位置
int v_pos = LocateVex(G, v);
if (v_pos == -1) {
return ERROR;
}
// 删除顶点及其关联边
for (int i = 0; i < G->vexnum; i++) {
if (i != v_pos) {
G->arcs[i][v_pos] = 0;
G->arcs[v_pos][i] = 0;
}
}
for (int i = v_pos; i < G->vexnum-1; i++) {
G->vexs[i] = G->vexs[i+1];
}
G->vexnum--;
// 删除与顶点 v 相关的边
for (int i = 0; i < G->vexnum; i++) {
for (int j = v_pos; j < G->vexnum-1; j++) {
G
阅读全文