请设计void addEdge(Graph g, VertexType v1, VertexType v2, int w)函数。 该函数在图g插入边v1v2(权为w). 插入的边结点作为边链表的第1个结点. 如果顶点不存在,则什么也不做。 如果待插入的边已存在, 存储小权值. 以下函数已定义,可以直接调用 int locateVertex(Graph g, VertexType v); 请注意,本题有预置代码,只需提交所要求的函数定义代码即可。
时间: 2024-02-18 17:03:06 浏览: 54
Hoja-de-Trabajo-2:工作表2,UVG数据结构
以下是函数定义代码:
```c
void addEdge(Graph g, VertexType v1, VertexType v2, int w) {
int loc1 = locateVertex(g, v1);
int loc2 = locateVertex(g, v2);
if (loc1 == -1 || loc2 == -1) {
return;
}
EdgeNode *p = g[loc1].firstEdge;
while (p != NULL) {
if (p->adjvex == loc2) {
if (p->weight > w) {
p->weight = w;
}
return;
}
p = p->next;
}
EdgeNode *newEdge = new EdgeNode;
newEdge->adjvex = loc2;
newEdge->weight = w;
newEdge->next = g[loc1].firstEdge;
g[loc1].firstEdge = newEdge;
}
```
具体思路如下:
首先,通过 `locateVertex` 函数获取顶点 `v1` 和 `v2` 在图中的位置,如果有一个顶点不存在,则直接返回。
接着,遍历顶点 `v1` 的边链表,如果找到了顶点 `v2` 的边,则比较边的权值,如果当前边的权值比待插入的边的权值大,则更新当前边的权值为待插入边的权值,然后直接返回。
最后,如果在顶点 `v1` 的边链表中没有找到顶点 `v2` 的边,则新建一个边结点,并将其插入到顶点 `v1` 的边链表的第一个位置。
阅读全文