-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathconnectivitygraph.h
90 lines (69 loc) · 2.11 KB
/
connectivitygraph.h
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
#ifndef CONNECTIVITYGRAPH_H
#define CONNECTIVITYGRAPH_H
#include <string>
#include <map>
#include <set>
#include <queue>
#include <vector>
#include <Eigen/Core>
class ConnectivityGraph
{
public:
ConnectivityGraph(size_t numNodes);
void addNode(size_t node, const std::vector<size_t> &neighbors);
std::vector<size_t> neighbors(size_t node) const
{
return std::vector<size_t>(mGraph.begin() + mGraphIndices[node].first, mGraph.begin() + mGraphIndices[node].first + mGraphIndices[node].second);
}
std::pair<std::vector<size_t>::const_iterator, std::vector<size_t>::const_iterator> neighborsIterator(size_t node) const {
return std::make_pair(mGraph.begin() + mGraphIndices[node].first, mGraph.begin() + mGraphIndices[node].first + mGraphIndices[node].second);
}
void setGroupIndices(const std::vector<size_t> &indices);
void addGroup(size_t group, const std::vector<size_t> &points);
void removeGroup(size_t group);
void mergeGroups(size_t sourceGroup, size_t destGroup);
const std::vector<size_t>& groupIndices() const
{
return mGroupIndices;
}
const std::vector<size_t>& pointsInGroup(size_t group) const
{
return mGroups.at(group);
}
std::set<size_t> groups() const
{
std::set<size_t> groups;
for (const std::pair<size_t, std::vector<size_t> > &group : mGroups)
{
groups.insert(group.first);
}
return groups;
}
size_t groupOf(size_t node) const
{
return mGroupIndices[node];
}
size_t numGroups() const
{
return mGroups.size();
}
size_t numPoints() const
{
return mGraphIndices.size();
}
size_t numPointsInGroup(size_t group) const
{
return mGroups.at(group).size();
}
bool hasGroups() const
{
return mGroupInitialized;
}
private:
std::vector<size_t> mGraph;
std::vector<std::pair<size_t, size_t> > mGraphIndices;
std::vector<size_t> mGroupIndices;
std::map<size_t, std::vector<size_t> > mGroups;
bool mGroupInitialized;
};
#endif // CONNECTIVITYGRAPH_H