数据结构C++版邻接矩阵图

代码实现:

//邻接矩阵图
#include<iostream>
using namespace std;
const int DefaultVertices = 30;
const int maxWeight = -1;
class Graph {
public:
	Graph(int sz = DefaultVertices) {
		maxVertices = sz;
		numEdges = 0;
		numVertices = 0;
		int i, j;
		VerticesList = new int[maxVertices];
		Edge = (int**)new int* [maxVertices];
		for (i = 0; i < maxVertices; i++)
			Edge[i] = new int[maxVertices];
		for (i = 0; i < maxVertices; i++)
			for (j = 0; j < maxVertices; j++)
				Edge[i][j] = (i == j) ? 0 : maxWeight;
	}
	int getFirstNeighbor(int v) {
		if (v != -1) {
			for (int col = 0; col < numVertices; col++)
				if (Edge[v][col] > 0 && Edge[v][col] < maxWeight)return col;
		}
		return -1;
	}
	int getNextNeighbor(int v, int w) {
		if (v != -1 && w != -1) {
			for (int col = w + 1; col < numVertices; col++)
				if (Edge[v][col] > 0 && Edge[v][col] < maxWeight)return col;
		}
		return -1;
	}
	bool insertVertex(const int& vertex) {
		if (numVertices == maxVertices)return false;
		VerticesList[numVertices++] = vertex;
		return true;
	}
	bool removeVertex(int v) {
		if (v < 0 || v >= numVertices)return false;
		if (numVertices == 1)return false;
		int i, j;
		VerticesList[v] = VerticesList[numVertices - 1];
		for (i = 0; i < numVertices; i++)
			if (Edge[i][v] > 0 && Edge[i][v] < maxWeight)numEdges--;
		for (i = 0; i < numVertices; i++)
			Edge[i][v] = Edge[i][numVertices - 1];
		numVertices--;
		for (j = 0; j < numVertices; j++) 
			Edge[v][j] = Edge[numVertices][j];
		return true;
	}
	bool insertEdge(int v1, int v2, int cost) {
		if (v1 > -1 && v1<numVertices && v2 > -1 && v2 < numVertices && Edge[v1][v2] == maxWeight) {
			Edge[v1][v2] = Edge[v2][v1] = cost;
			numEdges++;
			return true;
		}
		else return false;
	}
	bool removeEdge(int v1, int v2) {
		if (v1 > -1 && v1<numVertices && v2 > -1 && v2 < numVertices && Edge[v1][v2] > maxWeight) {
			Edge[v1][v2] = Edge[v2][v1] = maxWeight;
			numEdges--;
			return true;
		}
		else return false;
	}
	void output() {
		int i,j;
		for (i = 0; i < numVertices; i++) {
			cout << VerticesList[i] << "         ";
			for (j = 0; j < numVertices; j++)
				cout << Edge[i][j] << "  ";
			cout << endl;
		}
	}
private:
	int numVertices;
	int numEdges;
	int maxVertices;
	int* VerticesList;
	int** Edge;
	int getVertexPos(int vertex) {
		for (int i = 0; i < numVertices; i++) {
			if (VerticesList[i] == vertex)return i;
			else return -1;
		}
	}
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值