Google OR-Tools: ortools/graph/connected_components.cc Source File
28 if (num_nodes == old_num_nodes) {
31 CHECK_GE(num_nodes, 0) << "Number of nodes overflowed the `int` type.";
32 CHECK_GT(num_nodes, old_num_nodes);
36 std::iota(parent_.begin() + old_num_nodes, parent_.end(), old_num_nodes);
38 component_size_.resize(num_nodes, 1);
66 if (num_nodes != num_nodes_at_last_get_roots_call_) {
70 const int previous_num_roots = roots_.size();
71 roots_.resize(previous_num_roots + num_nodes -
72 num_nodes_at_last_get_roots_call_);
73 std::iota(roots_.begin() + previous_num_roots, roots_.end(),
74 num_nodes_at_last_get_roots_call_);
81 &roots_, [&](const int node) { return node != FindRoot(node); });
89 const int min_num_nodes = std::max(node1, node2) + 1;
103 DCHECK_GE(num_components_, 2);
106 const int component_size = component_size_[root1] + component_size_[root2];
111 if (rank_[root1] > rank_[root2]) {
113 component_size_[root1] = component_size;
116 component_size_[root2] = component_size;
142 int current_component = 0;
144 int& root_component = component_ids[FindRoot(node)];
147 root_component = current_component;
bool Connected(int node1, int node2)
Definition connected_components.cc:125
int GetSize(int node)
Definition connected_components.cc:133
bool AddEdge(int node1, int node2)
Definition connected_components.cc:87
int GetNumberOfNodes() const
void SetNumberOfNodes(int num_nodes)
Definition connected_components.cc:26
std::vector< int > GetComponentIds()
Definition connected_components.cc:140
const std::vector< int > & GetComponentRoots()
Definition connected_components.cc:64
int FindRoot(int node)
Definition connected_components.cc:45
void STLEraseAllFromSequenceIf(T *v, P pred)