Главная страница
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.47 MB
Время: 0.02 c
6-37820
Сергей Н.
2003-10-03 09:42
2004.01.13
Как получить локальный IP адрес


3-37569
bon
2003-12-15 10:43
2004.01.13
Query


1-37664
Vitalik
2003-12-26 15:59
2004.01.13
VirtualStringTree


3-37571
Stas
2003-12-11 10:41
2004.01.13
dll и Ado


1-37726
Evgeny78
2003-12-30 14:25
2004.01.13
OLE