这将是2018年最后一篇博文了。
主要是讲一讲图的增加功能的实现(包括增加边和增加顶点)
在头文件"adjacentmatrix.h"和"PrintMgraph.h"和"GetLocationOfBver.h"。
#include"adjacentmatrix.h"
#include"PrintMgraph.h"
bool Mgraph:: InsertEdge(Mgraph*G) { //可插入多条边
int n, w;
cout << "请输入增加的边数:" << endl;
cin >> n;
while (n--) {
Ver v1, v2;
cout << "请输入增加的边的两个顶点和权值:" << endl;
cin >> v1 >> v2 >> w;
if (v1<-1 && v2<-1 && v1>(G->vernum) - 1 && v2>(G->vernum) - 1) {
cout << "顶点不符合要求 插入失败!" << endl;
return false;
}
else {
int i = GetLocationOfVer(G, v1);
int j = GetLocationOfVer(G, v2);
if (G->edge[i][j] != Max) {
cout << "该边已存在 插入失败!" << endl;
return false;
}
else {
G->edge[i][j] = G->edge[j][i] = w;
}
cout << "插入成功!" << endl;
}
}
PrintMgraph(G);
return true;
}
bool Mgraph::InsertVer(Mgraph *G) {
if (G->vernum == MaxVer)
return false;
else {
cout << "请输入增加的顶点数:" << endl;
int n;
cin >> n;
cout << "请输入插入的顶点:" << endl;
while (n--) {
Ver v;
cin >> v;
G->ver[G->vernum] = v;
G->vernum++; //插入顶点
for (int i = 0; i < G->vernum; i++) {
int j = GetLocationOfVer(G, v);
if (i == j)
G->edge[i][j] = 0; //不存在的边 初始化为0
else {
G->edge[i][j] = G->edge[j][i] = Max; //插入后初始化 没有边信息 为无穷大
}
}
}
}
cout << "插入成功!" << endl;
PrintMgraph(G);
return true;
}
#pragma once
增加顶点时,需要考虑该顶点是不是已经存在。只有该顶点不存在时,才能进行顶点的增加。
增加顶点时,只是增加了顶点并没有增加边。因此,需要对增加后的图进行初始化。增加的顶点和图中其他顶点之间为无穷,对角线保证为0.
增加边时,需要考虑输入的两个顶点是不是都在图中,也需要考虑改边关系是否已经存在。只有这两个顶点都在图中存在且不存在边关系时,才只能增加两者之间的关系。
注意:增加一条边 意味着要处理二维数组中的两个元素。
好了,元旦快乐鸭!希望,在新的一年里,产出更多,收获更多。