#include <dancing_links_matrix.h>
◆ DancingLinksMatrix() [1/3]
| DancingLinksMatrix::DancingLinksMatrix |
( |
int | num_columns | ) |
|
|
explicit |
Конструктор матрицы с заданным количеством столбцов
- Аргументы
-
| num_columns | количество столбцов в матрице |
◆ ~DancingLinksMatrix()
| DancingLinksMatrix::~DancingLinksMatrix |
( |
| ) |
|
Деструктор, освобождает всю память
◆ DancingLinksMatrix() [2/3]
◆ DancingLinksMatrix() [3/3]
◆ addRow()
| void DancingLinksMatrix::addRow |
( |
std::span< const int > | col_indices, |
|
|
int | row_id ) |
Добавляет строку в матрицу
- Аргументы
-
| col_indices | список индексов столбцов, в которых в этой строке стоят единицы |
| row_id | уникальный идентификатор строки (возвращается в решении) |
◆ countColumns()
| int DancingLinksMatrix::countColumns |
( |
| ) |
const |
Возвращает количество столбцов в матрице
◆ cover()
| void DancingLinksMatrix::cover |
( |
int | col_idx | ) |
|
Покрывает столбец и все конфликтующие с ним строки
- Аргументы
-
◆ isCovered()
| bool DancingLinksMatrix::isCovered |
( |
int | col_idx | ) |
const |
Проверяет, покрыт ли столбец
- Аргументы
-
- Возвращает
- true если столбец уже покрыт, false иначе
◆ isFullyUncovered()
| bool DancingLinksMatrix::isFullyUncovered |
( |
| ) |
const |
Проверяет, все ли столбцы раскрыты
- Возвращает
- true если нет покрытых столбцов
◆ operator=() [1/2]
◆ operator=() [2/2]
◆ search()
| std::optional< std::vector< int > > DancingLinksMatrix::search |
( |
int | expected_solution_size = 0 | ) |
|
Поиск точного покрытия (алгоритм X).
- Аргументы
-
| expected_solution_size | ожидаемый размер решения (для резервирования памяти) |
- Возвращает
- решение в виде списка row_id, либо std::nullopt если решения нет
◆ uncover()
| void DancingLinksMatrix::uncover |
( |
int | col_idx | ) |
|
Восстанавливает ранее покрытый столбец (LIFO порядок).
- Аргументы
-
Объявления и описания членов классов находятся в файлах: