#include<iostream> using namespace std; #define UNVISTITED 0 //表示没有被访问过 #define VISITED 1 //表示被访问过 //图类 class Graph { private: int numVertex, numEdge;//点的数目和边的数目 int **matrix;//邻接矩阵 int *mark; public: //构造函数 Graph(int numVert) { Init(numVert); } //析构函数 ~Graph() { delete[]mark; for (int i = 0; i < numVertex; i++) { delete[]matrix[i]; } delete[]matrix; } //初始化 void Init(int n) { int i; numVertex = n; numEdge = 0; mark = new int[numVertex]; matrix = new int*[numVertex]; for (i = 0; i < numVertex; i++) { mark[i] = UNVISTITED; } for (i = 0; i < numVertex; i++) { matrix[i] = new int[numVertex]; } for (i = 0; i < numVertex; i++) { for (int j = 0; j < numVertex; j++) { matrix[i][j] = 0; } } } //返回点的数目 int n() { return numVertex; } //返回边的数目 int e() { return numEdge; } //返回点V的第一个邻居 int first(int v){ for (int i = 0; i < n(); i++) { if (matrix[v][i] != 0) { return i; } } return -1; } //返回W后的第一个邻居 int next(int v, int w) { for (int i = w + 1; i < n(); i++) { if (matrix[v][i] != 0) { return i; } } return -1; } //设置v1与v2之间有边,赋值wt void setEdge(int v1, int v2, int wt) { if (matrix[v1][v2] == 0) { matrix[v1][v2] = wt; numEdge++; } } //删除v1和v2之间的边 void deleteEdge(int v1, int v2) { if (matrix[v1][v2] == 1) { matrix[v1][v2] = 0; numEdge--; } } }; int main() { }
时间: 2024-10-08 00:54:46