30 std::vector<bool> should_be_deleted(
NumCycles(),
false);
31 for (
int i : cycle_indices) {
34 DCHECK(!should_be_deleted[i])
35 <<
"Duplicate index given to RemoveCycles(): " << i;
36 should_be_deleted[i] =
true;
38 int new_cycles_size = 0;
39 int new_cycle_ends_size = 0;
42 const int end = cycle_ends_[i];
43 if (!should_be_deleted[i]) {
45 cycles_[new_cycles_size++] = cycles_[j];
47 cycle_ends_[new_cycle_ends_size++] = new_cycles_size;
51 cycles_.resize(new_cycles_size);
52 cycle_ends_.resize(new_cycle_ends_size);
56 DCHECK_EQ(cycles_.empty(), cycle_ends_.empty());
57 if (!cycles_.empty()) DCHECK_EQ(cycles_.size(), cycle_ends_.back());
58 std::vector<std::vector<int>> cycles;
60 for (
const int end : cycle_ends_) {
63 for (
int i =
start + 1; i <
end; ++i) {
64 if (cycles_[i] < cycles_[min_pos]) min_pos = i;
66 std::vector<int> cycle;
67 for (
int i = min_pos; i <
end; ++i) cycle.push_back(cycles_[i]);
68 for (
int i =
start; i < min_pos; ++i) cycle.push_back(cycles_[i]);
69 cycles.push_back(cycle);
72 std::sort(cycles.begin(), cycles.end());
74 for (
const std::vector<int>& cycle : cycles) {
75 if (!out.empty()) out +=
" ";
77 out += absl::StrJoin(cycle,
" ");