Я хочу сделать BFS на 2D-массиве, и каждая ячейка может быть представлена как pair<int,int>
. Я использую queue<pair<int,int>>
для отслеживания ячеек на каждом уровне, но я не нашел умного способа отслеживать глубину. (Я не хочу определять другую структуру для записи глубины на каждом уровне)Как отслеживать глубину BFS в C++
How to keep track of depth in breadth first search? Вот решение на Java. Каждый уровень заканчивается null
, и мы увеличиваем глубину, как только видим null
.
Мне интересно, есть ли аналогичное элегантное решение на C++. На данный момент я могу думать о следующих путях: 0)
1) подсчитайте количество ячеек (push()
) на каждом уровне и уменьшите счет после каждого pop()
. Как только count == 0
, увеличьте глубину.
2) используйте два queue
и замените старый на новый в конце каждого уровня. Увеличьте глубину в конце каждой итерации.
3) возможно хранит указатель на pair<int,int>
в очереди и использует NULL
для разделения уровней?
Вы просто используете «значение маркера». В качестве альтернативы вы можете использовать 'std :: optional>' (предполагая что-то вроде C++ 17 'std :: optional' доступно) –