Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];

Вниз

ОБХОД ГРАФА ( в глубину ) - помогите, кто в курсе!   Найти похожие ветки 

 
Rradion   (2003-12-26 14:53) [0]

Есть граф и его матрица инцидентности ( стринг грид - К примеру StringGrid1.Cells[1, 1] := "1"; ) ...

http://www.elena-antimonova.com/BRT/grafi.jpg

... который надо обойти - выписать, к примеру в массив, номера вершин по мере их прохождения.

Нашел такой Алгоритм:

7.3. Алгоритмы работы с графами

Обход графа — это некоторое систематическое перечисление его вершин или ребер. Алгоритмы прохождения графа напоминают алгоритмы прохождения дерева (см. п. 8.2) и отличаются от них мерами, препятствующими повторному посещению вершин. Для этого однажды пройденные вершины помечаются, а перед посещением вершины делается проверка отсутствия отметки. Для отметок отводится особый массив пометок, индексами которого служат номера вершин графа. Среди всех обходов наиболее известны способы прохождения графа в ширину и в глубину, которые лежат в основе многих конкретных алгоритмов на графах.
В представленных ниже алгоритмах полагается, что граф представлен списком инцидентности; массив пометок обнулен, т. е. пройден вершин нет.

АЛГОРИТМ 7.1. Прохождение графа в глубину.
1. Выбрать из непройденных вершину с наименьшим номером. Если непройденных вершин нет, закончить работу - конец алгоритма.
2. Пройти выбранную вершину и отметить ее в массиве пометок как пройденную.
3. Просмотреть список инцидентности только что пройденной вершины и к каждой непройденной вершине из списка применить рекурсивно пункты 2 и 3 данного алгоритма.
4. Перейти к пункту 1.

Примечания.
1. Программируя алгоритм 7.1, пункты 2 и 3 целесообразно оформлять в виде рекурсивной процедуры.
2. Алгоритм 7.1 позволяет установить, имеется ли в графе цепь ребер между двумя заданными вершинами. Для этого достаточно применить его пункты 2 и 3 к одной из заданных вершин. Если другая вершина будет пройдена, цепь есть; в противном случае - цепи нет.
3. Если в качестве отметки о прохождении записывать номер предшествующей вершины, то можно проследить путь из одной вершины к другой.


А как его реализовать в код еще не совсем понял. У кого есть соображение, подскажите плиз.

Заранее Благодарю!


 
Романов Р.В.   (2003-12-26 15:45) [1]

Начинаем из точки V1
1. Отмечаем точку V1 как пройденную
2. Определяем с кем связана точка V1 (цикл по строке)
2.1. Просматриваем строку V1 в матрице
2.2. Видим в столбце E1 единицу
3. Просматриваем столбец E1 (цикл по столбцу)
3.1. В строке V1 видим единицу
3.2. Проверяем пройденна ли точка V1
3.3. Она пройдена.
3.4. В строке V2 видим единицу
3.5. Проверяем пройденна ли точка V2
3.6. Она не пройдена
4. Вызываем рекурсивно пункт 1 для точки V2

5. Отмечаем точку V1 как пройденную
6. Определяем с кем связана точка V2 (цикл по строке)
6.1. Просматриваем строку V2 в матрице
6.2. Видим в столбце E1 единицу
7. Просматриваем столбец E1 (цикл по столбцу)
7.1. В строке V1 видим единицу
7.2. Проверяем пройденна ли точка V1
7.3. Она пройдена.
7.4. В строке V2 видим единицу
7.5. Проверяем пройденна ли точка V2
7.6. Она пройдена
и т.д.


 
Романов Р.В.   (2003-12-26 16:14) [2]


> 5. Отмечаем точку V1 как пройденную


5. Отмечаем точку V2 как пройденную



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.01.13;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.014 c
1-37746
lovres
2003-12-30 08:58
2004.01.13
Где взять новую версию OLE?


1-37704
Крутыш
2003-12-24 22:17
2004.01.13
Как сделать обращение к MdiChild –форме из другой MdiChild-формы?


3-37508
Mikka
2003-12-16 10:37
2004.01.13
Одним запросом все таблицы...


6-37833
Passlight
2003-11-10 18:00
2004.01.13
Обработка ошибок в TIdHTTP


7-37948
Fants
2003-10-30 19:43
2004.01.13
CD-ROM





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский