给定一个无向图,在此无向图中增加一个新顶点,补充这段代码#include<iostream> #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define MVNum 100 //最大顶点数 using namespace std; typedef struct ArcNode {//边结点 int adjvex; //邻接点域:该边所指向的顶点的位置 int data; //数据域:存储和边相关的信息 struct ArcNode* nextarc; //链域:指向下一条边的指针 }ArcNode; typedef struct VNode {//顶点信息 int data; //顶点结点的数据域 ArcNode *firstarc; //链域:指向第一条依附该顶点的边的指针 }VNode,AdjList[MVNum]; //AdjList表示邻接表类型 typedef struct {//邻接表 AdjList vertices; int vexnum,arcnum; //图的当前顶点数和边数 }ALGragh; int CreateUDG(ALGragh &G,int vexnum,int arcnum) {//采用邻接表表示法,创建无向图G } int InsertVex(ALGragh &G) {//在以邻接表形式存储的无向图G上插入顶点v } int PrintGraph(ALGragh G) {//输出图G }
时间: 2023-10-21 07:03:30 浏览: 330
以下是增加新顶点的代码实现:
```
int InsertVex(ALGragh &G) {//在以邻接表形式存储的无向图G上插入顶点v
if(G.vexnum == MVNum) {//判断是否超过最大顶点数
return ERROR;
}
G.vexnum++;//当前顶点数+1
G.vertices[G.vexnum-1].data = G.vexnum;//新顶点的数据为当前顶点数
G.vertices[G.vexnum-1].firstarc = NULL;//新顶点没有邻接边,链域为空
for(int i = 0; i < G.vexnum-1; i++) {//遍历所有已有顶点,添加新顶点的邻接边
ArcNode *p = G.vertices[i].firstarc;
while(p != NULL && p->nextarc != NULL) {//找到最后一条邻接边
p = p->nextarc;
}
if(p == NULL) {//当前顶点没有邻接边,则新建一条邻接边
ArcNode *newarc = new ArcNode;
newarc->adjvex = G.vexnum-1;
newarc->nextarc = NULL;
G.vertices[i].firstarc = newarc;
} else {//当前顶点有邻接边,则在其后添加新的邻接边
ArcNode *newarc = new ArcNode;
newarc->adjvex = G.vexnum-1;
newarc->nextarc = NULL;
p->nextarc = newarc;
}
}
return OK;
}
```
在上述代码中,我们首先判断了当前顶点数是否超过了最大顶点数,如果超过了,则返回错误。然后,我们将当前顶点数加1,并为新顶点分配数据域和链域。接着,我们遍历所有已有顶点,为它们添加新顶点的邻接边。如果当前顶点没有邻接边,则新建一条邻接边;如果有邻接边,则在其后添加新的邻接边。最后返回操作结果。
阅读全文