Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ООП_самостійне_опрацюв.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.22 Mб
Скачать

2. Пошук шляху.|колії|

Механізм рекурсії вельми|дуже| ефективний при програмуванні завдань|задач| пошуку. Як ще один приклад|зразок| розглянемо|розглядуватимемо| завдання|задачу| пошуку шляху|колії| між двома містами. Якщо декілька міст сполучено|з'єднаний| дорогами, то очевидно, що потрапити|попадати| з|із| одного міста в іншій можна різними маршрутами. Завдання|задача| полягає в знаходженні всіх можливих маршрутів.

Карта доріг|любий| між містами може бути зображена|змальовувати| у вигляді графа – набору вершин, що означають міста, і ребер, що позначають|значать| дорогі|любі|.

Представлення карти дорогий у вигляді графа

Процес пошуку може бути представлений|уявляти| як послідовність кроків. На кожному кроці з використанням деякого критерію вибирається крапка|точка|, в яку можна потрапити|попадати| з|із| поточної. Якщо чергова вибрана крапка|точка| збіглася із|із| заданою кінцевою|скінченною| точкою, то маршрут знайдений. Якщо не збіглася, то робимо|чинимо| з|із| цієї крапки|точки| ще крок. Оскільки|тому що| поточна крапка|точка| може бути сполучена|з'єднана| з|із| декількома іншими, то потрібний якийсь формальний критерій вибору. У простому випадку можна вибрати крапку|точку| з|із| найменшим номером.

Хай|нехай|, наприклад, треба знайти всі можливі шляхи|колії| з|із| крапки|точки| 1 в крапку|точку| 5. Згідно|згідно з| прийнятому правилу, спочатку вибираємо крапку|точку| 2. На наступному|такому| кроці з'ясовуємо, що крапка|точка| 2 тупикова, тому повертаємося в крапку|точку| 1 і робимо|чинимо| крок в крапку|точку| 3. З|із| крапки|точки| 3 – в крапку|точку| 4, з|із| 4 – в 6 і з|із| крапки|точки| 6 – в крапку|точку| 5. Один маршрут знайдений. Після|потім| цього повертаємося в крапку|точку| 6 і перевіряємо, чи можливий крок в крапку|точку|, відмінну від 5. Оскільки|тому що| це можливо, то робимо|чинимо| крок в крапку|точку| 7, і потім|і тоді| – в 5. Знайдений ще один шлях|колія|. Таким чином, процес пошуку складається з кроків вперед і повернень назад. Пошук завершується, якщо з|із| вузла почала|розпочинала| рухи вже нікуди йти.

Алгоритм пошуку має рекурсивний характер|вдача|: щоб|аби| зробити крок, ми вибираємо крапку|точку| і знову робимо|чинимо| крок, і так продовжуємо до тих пір, поки не досягнемо мети|цілі|.

Таким чином, завдання|задача| пошуку маршруту може розглядатися|розглядувати| як завдання|задача| вибору чергової крапки|точки| (міста) і пошуку частини|частки| маршруту, що залишилася, тобто має місце рекурсія.

Граф можна представити|уявляти| двовимірним масивом, який назвемо|накликатимемо| mар| (карта). Значення елементу масиву map|[i, j] – це відстань між містами i і j, якщо міста сполучені|з'єднані| дорогою|любою|, або нуль, якщо міста не сполучені|з'єднані| прямою дорогою. Для приведеного графа масив тар| можна зобразити|змальовувати| у вигляді таблиці, представленої|уявляти| на малюнку.

Масив mар

Вміст елементу таблиці на перетині|пересіченні| рядка i і стовпця j відповідає значенню map|[i,j].

Окрім масиву mар| нам буде потрібно масив road| (дорога|люба|) і масив incl|(від include| – включати). У road| ми записуватимемо|занотовуватимемо| номери пройдених|минати| міст. У момент досягнення кінцевої|скінченної| крапки|точки| він міститиме|утримуватиме| номери всіх пройдених|минати| крапок|точок|, тобто опис маршруту.

У inci| [i] записуватимемо|занотовуватимемо| true|, якщо крапка|точка| з|із| номером i включена в маршрут. Робиться|чинить| це для того, щоб не включати в маршрут вже пройдену|минати| крапку|точку| (не ходити по кругу|колу|).

Оскільки|тому що| ми використовуємо рекурсивну процедуру, то треба звернути особливу увагу на умову завершення рекурсивного процесу. Процедура повинна припинити викликати|спричиняти| сама себе, якщо поточна крапка|точка| збіглася із|із| заданою кінцевою|скінченною| точкою.

На малюнку приведена блок-схема алгоритму процедури вибору чергової точки формованого маршруту, а діалогове вікно – на малюнку нижче.

Для введення масиву, що представляє опис карти, використовується компонент StringGridl, для виведення результату (знайденого маршруту) – поле влучні Label1. Початкова і кінцева точки маршруту задаються введенням значень в поля редагування Edit1 і Edit2. Процедура пошуку запускається клацанням кнопки Пошук (Buttonl). Поля влучний Label2, Label3 і Label4 використовуються для виведення пояснюючого тексту.

Блок-схема процедури вибору точки маршруту

Вікно програми Пошук маршруту

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