25Graph::Graph(
const int& npt,
const int& nconnect,
const vector<int>& connect_list) :
26 m_adj_list(vector<vector<int>> (npt, vector<int>())), m_degree(npt), m_npt(npt), m_nconnect(nconnect),
27 m_nb_connected_components(0), m_total_size(0)
29 for (
int i(0) ; i < m_nconnect ; ++i) {
30 int p1 = connect_list.at(2 * i);
31 int p2 = connect_list.at(2 * i + 1);
32 m_adj_list.at(p1).push_back(p2);
33 m_adj_list.at(p2).push_back(p1);
35 for (
int i(0) ; i < npt ; ++i) {
36 std::sort(m_adj_list.at(i).begin(), m_adj_list.at(i).end());
37 vector<int>::iterator iter = std::unique(m_adj_list.at(i).begin(), m_adj_list.at(i).end());
38 m_adj_list.at(i).erase(iter, m_adj_list.at(i).end());
39 m_degree.at(i) = m_adj_list.at(i).size();
46 vector<int> res(
m_npt, -2);
56 int si = *(p.end()-1);
57 vector<int>::const_iterator iter =
58 find_if(
m_adj_list.at(si).begin(),
m_adj_list.at(si).end(), [
this](
const int& ii) {return (m_color.at(ii) == 0);});
84 vector<int>::iterator iter;
87 s0 = distance(
m_color.begin(), iter);
96 int s0 = distance(
m_path_diag.at(i_connect).begin(), iter);
97 vector<vector<int>> inver(
m_npt, vector<int>());
98 for (
int ipt(0) ; ipt <
m_npt ; ipt++) {
100 inver.at(
m_path_diag.at(i_connect).at(ipt)).push_back(ipt);
113 for (
int i(0) ; i <
m_path.at(iconnect).size() ; ++i) {
116 vector<int>::iterator max_it, min_it;
117 max_it = max_element(degree.begin(), degree.end());
118 min_it = min_element(degree.begin(), degree.end());
119 if (*max_it == 2 && *min_it == 2) {
120 vector<int> path_new;
121 int s0 =
m_path.at(iconnect).at(0);
127 path_new.push_back(s0);
132 ok = (path_new.size() !=
m_path.at(iconnect).size());
133 if (!ok && s1 == sinit) {
134 res.at(iconnect) =
true;
139 m_path.at(iconnect) = path_new;
146 cout <<
"Number of points: " <<
m_npt << endl;
147 cout <<
"Number of edges: " <<
m_nconnect << endl;
150 cout <<
"Component " << i << endl;
152 for (
int j(0) ; j <
m_path.at(i).size() ; j++) {
153 cout <<
m_path.at(i).at(j) <<
" " ;
std::vector< int > dfs(int p0, std::vector< int > &)
std::vector< std::vector< int > > m_path_diag
std::vector< std::vector< int > > m_adj_list
int m_nb_connected_components
std::vector< int > m_color
std::vector< std::vector< int > > m_path
std::vector< int > m_degree
std::vector< bool > build_cycle()