Здравствуйте.
Собственно задача:
Имеется сильно связный неориентированный невзвешенный граф. Требуется найти такую вершину (центр), чтобы кратчайшие расстояния от нее до всех остальных вершин графа были, по-возможности, минимальны.(по-моему не совсем корректно, поэтому скажу иначе: поиск в ширину, пущенный от нее, должен сделать минимальное число "волн").
Естественно, решение за O(n^2) очевидно (просто серия из n поисков в ширину), но при этом время работы алгоритма слишком велико. Собственно, был бы рад любым идеям по реализации данного алгоритма .
ЗЫ
Из собственных мыслей:
1.) Взять произвольную вершину. Пустив bfs из нее, найти наиболее удаленную от нее вершину ( пусть она будет называться L ). Пустив bfs от L, найти наиболее удаленную от нее вершину ( R ). Пустить одноременно два bfs'а от L и R и ждать их пересечения. Центр, имхо, будет лежать где-то в множестве вершин, вошедших в это пересечение. (но опять - таки их слишком много)
2.) Попытаться использовать данные предыдущих поисков. Но эта идея по-моему бесперспективна...
Поиск центра графа |