Я хочу перебирать каждую связанную компоненту неориентированного графа, содержащую ~ 10 вершины. т.е. я хочу вызвать некоторую функцию F (V я) на каждом вектор V ... V к где У я представляет собой вектор, содержащий данные, прикрепленный к каждому узлу в г-й компоненте связности граф.Итерация по связанным компонентам
Каковы самые быстрые алгоритмы для этого?
Мои первые мысли были:
- Хранить все посещенные вершины в кучу, а затем повторно взять вершину из кучи, используйте DFS, чтобы найти его компонента связности V я, вызов F (V я) и удалите все вершины компонента из кучи.
- Найти вариант непересекающихся множеств union-find, который не только поддерживает эффективное объединение соединений, но также позволяет эффективно перебирать множества и находить их элементы. (Возможно ли это?)
Конечно ДФС есть способ сделать это, однако это может зависеть от того, если вы пытаетесь оптимизировать это для разового вычисления, или для вычислений, которые будут происходить часто. При наличии некоторого большего количества заказов вам не нужно будет снова открывать связанные компоненты. – AndyG
Зачем вам нужна куча для этого? Используйте простой хэшсет, DFS/BFS работают и наиболее оптимальны. –
Можно ли считать граф как список смежности? Можно ли считать, что вершины нумеруются от 0 до N-1, где N - общее число вершин? – pkacprzak