dfs(v: вершина)

2. помітити вершину v як відвідану

3. для кожної не відвіданої вершини и, суміжною з вершиною v

dfs(u);

Все

Все.

Алгоритм пошуку в глибину не повністю задає порядок обходу вершин, суміжних з даною. Наприклад, суміжні вершини можна обходити в порядку зростання їх значення.

Ітеративний алгоритм обходу графу в глибину з використанням стеку:

Dfs(v: вершина)

s:Stack;

s.CreateStack;

s.push(v);

Помітити вершину v як відвідану;

Поки (!s.isEmpty) //поки стек не порожній

Begin

If (у вершини графу на вершині стеку не залишилось суміжних невідвіданих вершин)

s.pop;

Else

Begin

вибрати не відвідану вершину и, суміжну з вершиною на вершині стеку;

s.push(u);

Помітити вершину и як відвідану

End

End.

Приклад роботи цього алгоритму наведено на мал.2.

Завдання на роботу.

Написати програму обходу графу в глибину:

№ п/п Кількість вершин Суміжні вершини
    (1,4),(2,4),(3,4),(4,5),(6,5),(7,5),(8,7),(9,7),(10,7),(13,9),(14,9),(11,10),(12,10)
    (2,1),(3,1),(4,1),(5,1),(6,3),(7,3),(8,4),(9,4),(10,5),(11,5),(12,5),(13,6),(14,6),(15,8)
    (1,7),(2,7),(6,7),(5,7),(3,6),(4,6),(7,8),(16,8),(9,16),(10,16),(11,8),(12,8),(15,8),(13,15),(14,15)
    (1,5),(2,5),(3,5),(5,4),(6,4),(7,4)
    (1,2),(1,3),(4,2),(5,2),(6,3),(7,3),(8,7)
    (1,4),(2,4),(3,4),(4,5),(6,5),(7,5),(9,7),(8,7)
    (1,4),(2,4),(4,5),(3,5),(6,5),(7,5),(9,7),(8,7),(10,7)
    (2,1),(3,1),(4,2),(5,2),(6,3),(7,3),(8,5),(9,5),(11,7),(10,7)
    (1,7),(2,7),(3,10),(4,10),(10,8),(11,8),(12,8),(7,8),(8,9),(6,9),(5,9)
    (1,7),(2,7),(5,10),(4,10),(12,11),(13,11),(6,9),(5,9),(7,8),(8,9),(10,8),(11,8)

Контрольні питання.

1. Поняття обходу графу.

2. Суть алгоритму обходу в глибину.

3. Рекурсивний алгоритм обходу в глибину.

4. Ітеративний алгоритм обходу в глибину (з використанням стеку).


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: