Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab7.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
32.93 Кб
Скачать

Лабораторна робота №7

Тема: Алгоритми на графах

Мета: Засвоїти теоретичні знання, вивчити алгоритми на графах

Теоретична частина

Численна кількість алгоритмів на графах ґрунтується на переборі всіх або части­ни їх вершин. Такий перебір називається обходом графу. Найвідоміші алгоритми обходу графу - це пошук вглибину та вшир.

Пошук вглибину

Розглянемо алгоритм пошуку вглибину у зв'язному неорієнтованому графі. Пошук починається із заданої стартової вершини і триває доти, доки не буде знайдено певної кінцевої вершини або поки є вершини, що утворюють маршрут пошуку. Стартову вершину пошуку позначимо літерою v. Виберемо довільне ребро (v, и), інциденте v. Якщо вершина и вже відвідана, вибираємо інше ребро, що є інцидентним v. У протилежному випадку вершину и вважаємо стартовою і повторюємо процедуру пошуку. Якщо пошук з вершини и завершується безуспішно, повер­таємося до вершини v і продовжуємо пошук ребер, інцидентних вершині v і та­ких, що раніше не відвідувалися. Вибір нових ребер триває доти, доки не вичер­паються всі ребра, що є інцидентними v, або доки пошук кінцевої вершини не завершиться успішно. Зауважимо, що під час пошуку вглибину в орієнтованому графі слід переглядати лише ті дуги, що виходять зі стартової вершини.

Важлива властивість алгоритму пошуку вглибину полягає в тому, що момен­ти виявлення вершини v і завершення процесу обробки списку суміжних з нею вершин утворюють правильну дужкову структуру. Якщо позначити факт ви­явлення вершини v дужкою, що відкривається, а завершення процесу обробки су­міжних з нею вершин — дужкою, що закривається, то послідовність дій утворить правильно побудований вираз із дужок.

Пошук ушир

За алгоритмом пошуку вшир здійснюється обхід вершин графу в порядку збільшен­ня відстані від стартової вершини. Відстань між вершинами а і b вважається рівною кількості ребер на найкоротшому шляху від а до b. Отже, спочатку пере­глядається стартова вершина, потім - суміжні з нею вершини, що входять до списку перегляду. Кожна ітерація алгоритму полягає у послідовному виборі всіх вершин зі списку перегляду і додаванні до цього списку вершин, що є суміжними з вибраними. При цьому вершини не можуть переглядатися двічі, а тому під час перегляду вершину слід помічати. Помічені вершини надалі нe розглядаються.

Список перегляду найзручніше зображувати у вигляді черги. При перегляді вершини всі суміжні з нею непомічені вершини додаються до черги, а сама вер­шина з черги вилучається. Пошук виконується доти, доки не буде знайдено кін­цевої вершини або доки список перегляду не стане порожнім.

Завдання

1.Реалізувати алгоритм пошуку вшир для знаходження шляху від стартової вер­шини до кінцевої в неорієнтованому графі. Інформація про граф записана у тек­стовому файлі, перший рядок якого містить кількість вершин графу, а кожний наступний рядок (визначає ребро графу) - два числа, що є номерами певних суміжних вершин.

2.Реалізувати алгоритм пошуку вглибину для знаходження шляхів від стартової вер­шини до кінцевої в неорієнтованому графі. Структура графу записана у тек­стовому файлі, що має структуру аналогічну файлу вхідних даних для програми пошуку вшир.

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

  1. Граф…

  2. Ребро…

  3. Дуга…

  4. Орієнтований граф…

  5. Суміжні вершини…

  6. Структури даних для зображення графу у пам’яті комп’ютера …

  7. Матриця суміжності …

  8. Матриця інциденцій неорієнтованого графу…

  9. Матриця інциденцій орієнтованого графу

Використаємо алгоритм пошуку вшир для знаходження шляхів від стартової вершини до кінцевої в неорієнтованому графі. Структура графу записана в тек­стовому файлі, перший рядок якого містить кількість вершин графу, а кожний на­ступний рядок — два числа, що є номерами певних суміжних вершин. Тобто ко­жен рядок файла, починаючи з другого, визначає ребро графу. Номери стартової та кінцевої вершин користувач вводить з клавіатури.

вхідний файл:

5

1 3

Лабораторна робота №7 1

Тема: Алгоритми на графах 1

Мета: Засвоїти теоретичні знання, вивчити алгоритми на графах 1

Теоретична частина 1

Пошук вглибину 1

Розглянемо алгоритм пошуку вглибину у зв'язному неорієнтованому графі. Пошук починається із заданої стартової вершини і триває доти, доки не буде знайдено певної кінцевої вершини або поки є вершини, що утворюють маршрут пошуку. Стартову вершину пошуку позначимо літерою v. Виберемо довільне ребро (v, и), інциденте v. Якщо вершина и вже відвідана, вибираємо інше ребро, що є інцидентним v. У протилежному випадку вершину и вважаємо стартовою і повторюємо процедуру пошуку. Якщо пошук з вершини и завершується безуспішно, повер­таємося до вершини v і продовжуємо пошук ребер, інцидентних вершині v і та­ких, що раніше не відвідувалися. Вибір нових ребер триває доти, доки не вичер­паються всі ребра, що є інцидентними v, або доки пошук кінцевої вершини не завершиться успішно. Зауважимо, що під час пошуку вглибину в орієнтованому графі слід переглядати лише ті дуги, що виходять зі стартової вершини. 1

Пошук ушир вершини finish, що розпочинається з вершини start, виконує процедура BreadthFirstSearch («пошук ушир»). Усі вершини, що є суміжними з поточною і не були помічені, додаються до черги за допомогою процедури AddList. Черга переглядаєть­ся, починаючи від вершини PCur, тому виконання оператора PCur: =PCur^. Next є дією, логічно еквівалентною видаленню вершини з черги. У разі знаходження кінцевої вершини або вичерпування всіх можливостей пошуку, чергу слід очистити за до­помогою процедури Clear. Нарешті, рекурсивна процедура Output здійснює виве­дення знайденого шляху. Для посилання на попередню вершину шляху вико­ристовується покажчик Prev.

Program vshyr; {пошук ушир }

uses crt;

type

PtrVer = ^TVer; {тип покажчика на вершину графу }

TVer = record {тип вершини графу }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]