Move sort_cells to operator< of Cell class
This commit is contained in:
parent
8d50ac79d0
commit
b5dfd9743a
17
main.cpp
17
main.cpp
@ -67,6 +67,10 @@ public:
|
|||||||
|
|
||||||
possible_values = possibilities;
|
possible_values = possibilities;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool operator<(const Cell &other) {
|
||||||
|
return possible_values.size() < other.possible_values.size();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
class Sudoku {
|
class Sudoku {
|
||||||
@ -101,12 +105,7 @@ public:
|
|||||||
cell.update_possible_values();
|
cell.update_possible_values();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::make_heap(heap.begin(), heap.end(), sort_cells);
|
std::make_heap(heap.begin(), heap.end());
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Turn this into a member of Cell as opterator<
|
|
||||||
static bool sort_cells(const Cell& a, const Cell& b) {
|
|
||||||
return a.possible_values.size() < b.possible_values.size();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update the possible values which a cell can take for every cell in the heap
|
// Update the possible values which a cell can take for every cell in the heap
|
||||||
@ -115,12 +114,12 @@ public:
|
|||||||
cell.update_possible_values();
|
cell.update_possible_values();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::sort_heap(heap.begin(), heap.end(), sort_cells);
|
std::sort_heap(heap.begin(), heap.end());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Returns the best cell in the heap (the one with the most obvious choice)
|
// Returns the best cell in the heap (the one with the most obvious choice)
|
||||||
Cell get_next_best_empty_cell() {
|
Cell get_next_best_empty_cell() {
|
||||||
std::pop_heap(heap.begin(), heap.end(), sort_cells);
|
std::pop_heap(heap.begin(), heap.end());
|
||||||
Cell c = heap.back();
|
Cell c = heap.back();
|
||||||
heap.pop_back();
|
heap.pop_back();
|
||||||
|
|
||||||
@ -179,7 +178,7 @@ public:
|
|||||||
|
|
||||||
// Put the cell back into the heap -- it couldn't be used for any valid solution, so we'll need it somewhere else later
|
// Put the cell back into the heap -- it couldn't be used for any valid solution, so we'll need it somewhere else later
|
||||||
heap.push_back(cell);
|
heap.push_back(cell);
|
||||||
std::push_heap(heap.begin(), heap.end(), sort_cells);
|
std::push_heap(heap.begin(), heap.end());
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user