-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMatrixGraph.cpp
58 lines (51 loc) · 1.46 KB
/
CMatrixGraph.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include <iostream>
#include <vector>
#include <assert.h>
#include "CMatrixGraph.h"
CMatrixGraph::CMatrixGraph(int vertexNum) {
vertexCount = vertexNum;
Matrix = new bool*[vertexCount];
Matrix[0] = new bool[vertexCount * vertexCount];
for (int i = 1; i < vertexCount; i++) {
Matrix[i] = Matrix[i - 1] + vertexCount;
}
for (int i = 0; i < vertexCount; i++) {
for (int j = 0; j < vertexCount; j++) {
Matrix[i][j] = false;
}
}
}
CMatrixGraph::CMatrixGraph(const IGraph* graph): CMatrixGraph(graph->VerticesCount()) {
std::vector<int> temp;
for (int i = 0; i < vertexCount; i++) {
graph->GetNextVertices(i, temp);
for (unsigned int j = 0; j < temp.size(); j++) {
this->AddEdge(i, temp[j]);
}
temp.clear();
}
}
CMatrixGraph::~CMatrixGraph() {
delete[] Matrix[0];
delete[] Matrix;
}
int CMatrixGraph::VerticesCount() const {
return vertexCount;
}
void CMatrixGraph::AddEdge(int from, int to) {
if (!Matrix[from][to]) {
Matrix[from][to] = true;
}
}
void CMatrixGraph::GetNextVertices(int vertex, std::vector<int>& vertices) const {
for (int i = 0; i < vertexCount; i++) {
if (Matrix[vertex][i])
vertices.push_back(i);
}
}
void CMatrixGraph::GetPrevVertices(int vertex, std::vector<int>& vertices) const {
for (int i = 0; i < vertexCount; i++) {
if (Matrix[i][vertex])
vertices.push_back(i);
}
}