vector get_center_points_lst()

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;

    }