Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.13;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
4-37989
stas kalishenko
2003-10-30 18:49
2004.01.13
Сервис и Novell-овский сетевой диск


1-37699
MadAngel
2003-12-25 23:43
2004.01.13
TreeView


14-37935
Bokus
2003-12-20 14:55
2004.01.13
Сети Петри (проверка на дастижимость и живость)


7-37952
Turonix
2003-10-30 15:53
2004.01.13
Как симулировать нажатие кнопки Page Down


6-37837
Кабан
2003-11-12 16:15
2004.01.13
CRC