图的增加功能实现

这将是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.
增加边时,需要考虑输入的两个顶点是不是都在图中,也需要考虑改边关系是否已经存在。只有这两个顶点都在图中存在且不存在边关系时,才只能增加两者之间的关系。
注意:增加一条边 意味着要处理二维数组中的两个元素。
好了,元旦快乐鸭!希望,在新的一年里,产出更多,收获更多。

猜你喜欢

转载自blog.csdn.net/JIA010814/article/details/85460135