请设计void delVertex(Graph g, VertexType v)函数。 该函数在图g中删除顶点v, 如果删除不成功,则什么都不做。 以下函数已定义,可以直接调用 int locateVertex(Graph g, VertexType v); void delEdge(Graph g, VertexType x, VertexType y); 请注意,本题有预置代码,只需提交所要求的函数定义代码即可。C语言
时间: 2024-03-06 14:51:07 浏览: 206
以下是实现void delVertex(Graph g, VertexType v)函数的代码:
```c
void delVertex(Graph g, VertexType v) {
int index = locateVertex(g, v); //获取顶点在图中的位置
if (index == -1) { //顶点不存在
return;
}
//删除与该顶点相关的所有边
for (int i = 0; i < g.vertexNum; i++) {
if (i == index) {
continue;
}
if (g.edges[index][i] != MAX_WEIGHT) {
delEdge(g, v, g.vertices[i]);
}
if (g.edges[i][index] != MAX_WEIGHT) {
delEdge(g, g.vertices[i], v);
}
}
//删除顶点
for (int i = index; i < g.vertexNum - 1; i++) {
g.vertices[i] = g.vertices[i + 1];
}
g.vertices[g.vertexNum - 1] = '\0';
for (int i = index; i < g.vertexNum - 1; i++) {
for (int j = 0; j < g.vertexNum; j++) {
g.edges[i][j] = g.edges[i + 1][j];
}
}
for (int i = index; i < g.vertexNum - 1; i++) {
for (int j = 0; j < g.vertexNum; j++) {
g.edges[j][i] = g.edges[j][i + 1];
}
}
g.vertexNum--;
}
```
首先,我们调用locateVertex函数获取顶点在图中的位置,如果顶点不存在,则直接返回。
然后,我们遍历整个图,删除与该顶点相关的所有边,即调用delEdge函数删除该顶点与其他顶点之间的边。
最后,我们删除该顶点本身。首先,我们将该顶点之后的所有顶点向前移动一个位置,然后将最后一个顶点置为'\0'。接着,我们将该顶点之后的所有行和列向前移动一个位置,最后将图的顶点数量减1。
阅读全文