请设计void addEdge(Graph g, VertexType v1, VertexType v2, int w)函数。 该函数在图g插入边v1v2(权为w). 插入的边结点作为边链表的第1个结点. 如果顶点不存在,则什么也不做。 如果待插入的边已存在, 存储小权值. 以下函数已定义,可以直接调用 int locateVertex(Graph g, VertexType v); 请注意,本题有预置代码,只需提交所要求的函数定义代码即可。图的邻接表,用c
时间: 2024-02-22 12:54:58 浏览: 138
以下是void addEdge(Graph g, VertexType v1, VertexType v2, int w)函数的定义代码:
```c
void addEdge(Graph g, VertexType v1, VertexType v2, int w) {
int i = locateVertex(g, v1);
int j = locateVertex(g, v2);
if (i == -1 || j == -1) {
return;
}
EdgeNode* p = g[i].firstEdge;
EdgeNode* pre = NULL;
while (p != NULL && p->adjvex != j) {
pre = p;
p = p->next;
}
if (p == NULL) {
EdgeNode* newEdge = (EdgeNode*)malloc(sizeof(EdgeNode));
newEdge->adjvex = j;
newEdge->weight = w;
newEdge->next = g[i].firstEdge;
g[i].firstEdge = newEdge;
} else {
if (p->weight > w) {
p->weight = w;
}
}
}
```
其中,Graph是邻接表表示的图,VertexType是顶点的数据类型,EdgeNode是边链表结点的数据类型。locateVertex函数用来定位顶点在图中的位置,如果返回-1表示顶点不存在。该函数的实现过程如下:
```c
int locateVertex(Graph g, VertexType v) {
for (int i = 0; i < g.vertexNum; i++) {
if (g[i].data == v) {
return i;
}
}
return -1;
}
```
阅读全文