in GraphSampling/meshPooler.h [247:308]
vector<int> get_center_points_lst(int stride) {
int radius = stride -1;
// Mark all the vertices as not visited
vector<int> cover_lst; //-1 not visited, 0 covered, 1 center
for (int i = 0; i < _connection_map.size(); i++) {
cover_lst.push_back(-1);
}
// Create a queue for BFS
list<int> queue;
// Mark the points in the _must_include_center_lst as center and enqueue it
int s;
for(int i=0; i<_must_include_center_lst.size();i++)
{
s = _must_include_center_lst[i];
cover_lst[s] = 1;
queue.push_back(s);
}
if(_must_include_center_lst.size()==0)
{
s=0;
queue.push_back(0);
}
while (!queue.empty()) {
// Dequeue a vertex from queue and print it
s = queue.front();
queue.pop_front();
vector<int> s_connection = _connection_map[s];
for (int i = 0; i < s_connection.size(); i++) {
int p = s_connection[i];
if (cover_lst[p] >= 0) //visited
continue;
if (can_be_center(p, radius, _connection_map, cover_lst)) {
cover_lst[p] = 1;
} else {
cover_lst[p] = 0;
}
queue.push_back(p);
}
}
vector<int> sample_points_lst;
for (int i = 0; i < cover_lst.size(); i++) {
if (cover_lst[i] == 1)
sample_points_lst.push_back(i);
}
return sample_points_lst;
}