-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMatrixGraph_dist.cpp
82 lines (69 loc) · 2.26 KB
/
CMatrixGraph_dist.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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
#include <vector>
#include "CMatrixGraph_dist.h"
CMatrixGraph_dist::CMatrixGraph_dist(int vertexNum) {
vertexCount = vertexNum;
hasEdge.resize(vertexCount * vertexCount, false);
Matrix = new double*[vertexCount];
Matrix[0] = new double[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] = 0;
}
}
}
CMatrixGraph_dist::CMatrixGraph_dist(const IGraph_dist& graph) : CMatrixGraph_dist(graph.VerticesCount()) {
std::vector<std::pair<int, double> > temp;
for (int i = 0; i < vertexCount; i++) {
graph.GetNextEdges(i, temp);
for (unsigned int j = 0; j < temp.size(); j++) {
this->AddEdge(i, temp[j].first, temp[j].second);
}
temp.clear();
}
}
CMatrixGraph_dist::~CMatrixGraph_dist() {
delete[] Matrix[0];
delete[] Matrix;
}
bool CMatrixGraph_dist::HasEdge(int from, int to) const {
if (hasEdge[from * vertexCount + to] == true)
return true;
return false;
}
double CMatrixGraph_dist::GetLength(int from, int to) const {
return Matrix[from][to];
}
int CMatrixGraph_dist::VerticesCount() const {
return vertexCount;
}
void CMatrixGraph_dist::AddEdge(int from, int to, double dist) {
Matrix[from][to] = dist;
hasEdge[from * vertexCount + to] = true;
}
void CMatrixGraph_dist::GetNextEdges(int vertex, std::vector<std::pair<int, double>>& vertices) const {
for (int i = 0; i < vertexCount; i++) {
if (hasEdge[vertex * vertexCount + i] != false)
vertices.push_back(std::make_pair(i, Matrix[vertex][i]));
}
}
//void CMatrixGraph_dist::GetPrevVertices(int vertex, std::vector<std::pair<int, double>>& vertices) const {
// for (int i = 0; i < vertexCount; i++) {
// if (hasEdge[i * vertexCount + vertex] != false)
// vertices.push_back(std::make_pair(i, Matrix[vertex][i]));
// }
//}
void CMatrixGraph_dist::GetNextEdges(int vertex, std::vector<int>& vertices) const {
for (int i = 0; i < vertexCount; i++) {
if (hasEdge[vertex * vertexCount + i] != false)
vertices.push_back(i);
}
}
//void CMatrixGraph_dist::GetPrevVertices(int vertex, std::vector<int>& vertices) const {
// for (int i = 0; i < vertexCount; i++) {
// if (hasEdge[i * vertexCount + vertex] != false)
// vertices.push_back(i);
// }
//}