代码实现:
//邻接矩阵图
#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;
}
}
};