У меня есть очередь с приоритетами, которая содержит отсортированную матрицу A вместе с ее расположением (row, col) в матрице. Итак, у меня есть структура данных «queue_element», которая имеет три поля: queue_element.value, queue_element.row и queue_element.col
Мне нужно обработать очередь с приоритетами, и для каждого всплывающего элемента мне нужно вернуться в местоположение A (row, col) и удалить все элементы, лежащие в одной строке # и col #.
Так, например, если в верхней части очереди приоритетов есть element.value = 0,99, element.row = 4 и element.col = 20, то мне нужно обнулить A (4, :) и A (:, 20), где нотация «:» обозначает «все» или весь диапазон от 0 до конца. Это нотация MATLAB / Python, но для этого я использую C ++.
В настоящее время я использую отдельную булеву матрицу P (x, y) для исключения. Для каждого (x, y) местоположения, которое извлекается из очереди приоритетов, я просто зацикливаюсь на всей строке / столбце и устанавливаю ложное значение для всего, что находится в той же строке / столбце. Затем, когда я извлекаю элемент из очереди, я просто проверяю, установлено ли для него значение false в P (x, y).
Однако это довольно неэффективно. Базовый случай моего алгоритма требует только удаления всей строки / столбца.
РЕДАКТИРОВАТЬ: Извините, что пропустил последнюю часть моего вопроса ...
Более продвинутая версия этого алгоритма требует устранения всего в той же строке / столбце, но за исключением ближайших 4 соседей. Другая версия требует устранения всего, что находится в верхнем правом и нижнем левом квадранте матрицы, когда сетка X-Y размещена в позиции (строка, столбец).
Мой вопрос в основном заключается в том, существует ли очевидная структура данных, которую я мог бы использовать. Это должно было бы: а) позволить мне эффективно "исключить" или обнулить элементы, которые мне нужны, и б) дать мне возможность очень быстро проверить членство в наборе.
Есть идеи, как мне поступить?