Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions ortools/set_cover/set_cover_model.cc
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,8 @@ void SetCoverModel::SetSubsetCost(SubsetIndex subset, Cost cost) {
}

void SetCoverModel::AddElementToSubset(BaseInt element, BaseInt subset) {
CHECK_GE(element, 0) << "Invalid element index: " << element;
CHECK_GE(subset, 0) << "Invalid subset index: " << subset;
elements_in_subsets_are_sorted_ = false;
if (subset >= num_subsets()) {
num_subsets_ = subset + 1;
Expand Down
18 changes: 14 additions & 4 deletions ortools/set_cover/set_cover_reader.cc
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,9 @@ SetCoverModel ReadOrlibScp(absl::string_view filename) {
const RowEntryIndex row_size(reader.ParseNextInteger());
for (RowEntryIndex entry(0); entry < row_size; ++entry) {
// Correct the 1-indexing.
const SubsetIndex subset(reader.ParseNextInteger() - 1);
const int64_t raw_subset = reader.ParseNextInteger();
CHECK_GE(raw_subset, 1) << "Invalid 1-indexed subset index: " << raw_subset;
const SubsetIndex subset(raw_subset - 1);
model.AddElementToSubset(element, subset);
}
}
Expand Down Expand Up @@ -168,7 +170,9 @@ SetCoverModel ReadOrlibRail(absl::string_view filename) {
model.ReserveNumElementsInSubset(column_size.value(), subset.value());
for (const ColumnEntryIndex _ : ColumnEntryRange(column_size)) {
// Correct the 1-indexing.
const ElementIndex element(reader.ParseNextInteger() - 1);
const int64_t raw_element = reader.ParseNextInteger();
CHECK_GE(raw_element, 1) << "Invalid 1-indexed element index: " << raw_element;
const ElementIndex element(raw_element - 1);
model.AddElementToSubset(element, subset);
}
}
Expand Down Expand Up @@ -360,7 +364,10 @@ SubsetBoolVector ReadSetCoverSolutionText(absl::string_view filename) {
const BaseInt cardinality(reader.ParseNextInteger());
for (int i = 0; i < cardinality; ++i) {
// NOTE(user): The solution is 0-indexed.
const SubsetIndex subset(reader.ParseNextInteger());
const int64_t raw_subset = reader.ParseNextInteger();
CHECK_GE(raw_subset, 0) << "Invalid subset index: " << raw_subset;
CHECK_LT(raw_subset, num_cols) << "Subset index out of range: " << raw_subset;
const SubsetIndex subset(raw_subset);
solution[subset] = true;
}
file->Close(file::Defaults()).IgnoreError();
Expand All @@ -377,9 +384,12 @@ SubsetBoolVector ReadSetCoverSolutionProto(absl::string_view filename,
} else {
CHECK_OK(file::GetTextProto(filename, &message, file::Defaults()));
}
solution.resize(message.num_subsets(), false);
const BaseInt num_subsets = message.num_subsets();
solution.resize(num_subsets, false);
// NOTE(user): The solution is 0-indexed.
for (const BaseInt subset : message.subset()) {
CHECK_GE(subset, 0) << "Invalid subset index: " << subset;
CHECK_LT(subset, num_subsets) << "Subset index out of range: " << subset;
solution[SubsetIndex(subset)] = true;
}
return solution;
Expand Down