Repository navigation
Expand file tree
/
Copy pathHeader.h
More file actions
129 lines (110 loc) · 2.15 KB
/
Copy pathHeader.h
File metadata and controls
129 lines (110 loc) · 2.15 KB
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#pragma once
#include <iostream>
#include <random>
#include <string>
#include <fstream>
#include <sstream>
class Data
{
public:
friend std::ostream& operator<<(std::ostream& os, const Data* data)
{
os << data->value << "\n";
os << data->character << "\n";
return os;
}
Data(int& v, char& c)
{
value = v;
character = c;
};
int value;
char character;
};
template <typename T>
class DynamicArray
{
public:
DynamicArray()
{
current_size = 0;
}
T*& operator[](int index)
{
return *&dane[index];
};
int current_size;
T** dane = nullptr;
void addTail(T*& data);
template <typename Comparator>
void Merge(Comparator comp, int left, int middle, int right);
template <typename Comparator>
void MergeSortHelper(Comparator comp, int left, int right);
template <typename Comparator>
void MergeSort(Comparator comp);
T* returnData(int index);
void changeData(T*& data, int index);
void deleteAll();
void displayAllElements();
};
struct Node
{
float x = 0;
float y = 0;
Node() {};
Node(float NewX, float NewY)
{
x = NewX;
y = NewY;
}
};
struct Edge
{
int IndexOne = 0;
int IndexTwo = 0;
double weight = 0;
Edge(int newIndexOne, int newIndexTwo, double newWeight)
{
IndexOne = newIndexOne;
IndexTwo = newIndexTwo;
weight = newWeight;
}
};
class EdgeCompare // if the first bigger returns true
{
public:
bool operator()(const Edge e1, const Edge e2) const
{
if (e1.weight > e2.weight) return true;
else return false;
}
};
struct Graph
{
DynamicArray<Node> Nodes;
DynamicArray<Edge> Edges;
int size = Nodes.current_size;
Graph() {};
};
struct UnionFind
{
int* ParentIndex; // = nullptr;
int* Rank; // = nullptr;
int NumberOfNodes = 0;
int FindOpCounter = 0;
UnionFind(int n)
{
NumberOfNodes = n;
ParentIndex = new int[n];
Rank = new int[n];
for (int i = 0; i < n; i++)
{
ParentIndex[i] = i;
Rank[i] = 0;
}
}
void CombineTwoSets(int iNode, int jNode);
int FindRepresentative(int NodeIndex);
int PathCompression(int NodeIndex);
void UnionByRank(int iNode, int jNode);
};