Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нахождение мостов в графе 
:(
    Опции темы
i...
Дата 5.10.2004, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 41
Регистрация: 6.5.2003

Репутация: нет
Всего: нет



Две задачки с графами решил, а эту... Помогите, пожалуйста, кто чем может.

Мостом графа назовем такое ребро, удаление которого увеличивает число компонент связности графа. Найти: все мосты заданного графа.
PM MAIL   Вверх
LSD
Дата 5.10.2004, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: нет
Всего: 538



Если задача чисто теоретическая то можно так:
Возьмем любую пару точек A и B, и построим все возможные пути, без циклов из A в B. Если некое ребро будет входить в все пути, то это мост. Перебрав все возможные пары A и B, найдем все мосты.
Для практического применения этот алгоритм не оптимален.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
3,14
Дата 6.10.2004, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: нет
Всего: 24



Это вариант для связанного графа:
Перебираем все возможные разбиения мн-ва вершин графа на два различных мн-ва:
1) Если для какого-то разбиения найдено два различных ребра из одного мн-ва в другое - пееходим к следующему разбиению
2) Если такое ребро только одно, то оно и будет мостом
Для несвязанного графа - разбиваем его на компоненты связанности, и к каждой из них применяем этот алгоритм
Вообще у моста есть замечательное св-во - оно не содержится не в одном цикле, может кому удасться им воспользоваться, я, увы, не смог sad.gif


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
GePo
Дата 6.10.2004, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 30.3.2003
Где: Москва

Репутация: нет
Всего: 3



Вроде этот алгоритм есть в книге Липского. Решается поиском в глубину.
При очередном шаге будем увеличивать текущее время и присваивать его вершине. После всех вызовов из данной вершины запишем минимальное время вершины, которую мы смогли лостигнуть из данной. Если оно равно времени нашей вершины, то ребро из данной вершины и предка в дереве поиска в глубину и есть мост.

Это сообщение отредактировал(а) GePo - 6.10.2004, 22:37
--------------------
PM MAIL WWW   Вверх
3,14
Дата 6.10.2004, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1614
Регистрация: 18.6.2004
Где: Н. Новгород

Репутация: нет
Всего: 24



Цитата(GePo @ 6.10.2004, 22:37)
Вроде этот алгоритм есть в книге Липского. Решается поиском в глубину.
При очередном шаге будем увеличивать текущее время и присваивать его вершине. После всех вызовов из данной вершины запишем минимальное время вершины, которую мы смогли лостигнуть из данной. Если оно равно времени нашей вершины, то ребро из данной вершины и предка в дереве поиска в глубину и есть мост.

Если ты имеешь ввиду книгу: "Комбинаторика для программистов", то в ней я этого алгоритма не нашёл, но может просто прогладел, вот ссылка на оную книгу : ftp://www.scientific-library.net/pub/data...ve/lipskii.djvu


--------------------
Может быть, это только мой бред,
Может быть, жизнь не так хороша,
Может быть, я не выйду на свет,
Но я летал, когда пела душа...
PM MAIL   Вверх
GePo
Дата 8.10.2004, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 166
Регистрация: 30.3.2003
Где: Москва

Репутация: нет
Всего: 3



Начинаешь читать Липского со страницы 95, раздел 2.6 и читаешьесь раздел. Понимаешь, как находять точки сочленения, а мосты - читаешь, что я написал - будет понятно потом
--------------------
PM MAIL WWW   Вверх
maxim1000
Дата 10.10.2004, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 33
Всего: 110



подумал я тут недавно над этой задачкой, вроде нашел один не очень долгий способ, в котором используется то, что мост не входит ни в один цикл, только вместо цикла я рассматриваю два различных пути, соединяющих две точки
для начала:
0. выберем одну вершину (от фонаря)
1. припишем каждой вершине свойство - расстояние до выбранной точки (будем заполнять постепенно, сначала у выбранной точки 0, у остальных (-1)) и номер вершины, откуда в эту приходит минимальный путь
2. припишем каждому ребру свойство - пройдено/не пройдено (сначала все будут "не пройдены"), и "является/нет составной частью какого-нибудь цикла (сначала у всех будет "не является")
---
далее будем действовать по такому алгоритму:
1. смотрим на точки, до которых мы добрались на предыдущем шаге (сначала это будет одна выбранная точка)
2. смотрим на все ребра эти точек, которые мы еще не проходили
3. смотрим на точки на концах этих ребер
4. далее есть два варианта:
4.1. точка еще не обрабатывалась (расстояние равно -1), тут все просто даем ей расстояние n+1
4.2. точка уже проходилась - значит, мы обнаружили цикл, надо его пометить, помечаем таким образом: идем по двум путям (минимальному и только что найденному) до точки их раздвоения и помечаем их ребра "входящими в цикл"
5. повторяем все, пока не обработаем все вершины
6. те ребра, которые не помечены как "входящие в цикл" и есть мосты
честно говоря, не проверял его на сложных примерах, а так - вроде бы работает
плюс этого алгоритма в том, что за один проход обнаруживаются все мосты в графе...


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Алгоритмы"

maxim1000

Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Алгоритмы | Следующая тема »


 




[ Время генерации скрипта: 0.0453 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.