- •Зміст пояснювальної записки
- •Постановка задачі Організаційно-інформаційна сутність задачі [1]
- •Математична модель задачі [1]
- •Опис методів розв’язання задачі Метод гілок та границь
- •Алгоритм гілок і границь [1]
- •Зображення даних в оперативній пам’яті [2]
- •Опис алгоритму програмного модуля [2]
- •Оцінка складності алгоритму
- •Метод решета [2]
- •Алгоритм решета [2]
- •Зображення даних в оперативній пам’яті [2]
- •Опис алгоритму програмного модуля [2]
- •Оцінка складності алгоритму
- •Опис програми Методи та засоби розробки програми
- •Сценарій роботи програми
- •Функціональна структура програми Специфікація модулів
- •Специфікація функцій
- •Технологія створення програми
- •Опис алгоритму методу[2]
- •Алгоритм програми
- •Вхідні та вихідні тести
- •Опис алгоритму методу
- •Алгоритм програми
- •Опис алгоритму методу
- •Алгоритм програми
- •Висновок.
- •Список використаної літератури.
- •Додаток 1 cd та опис його змісту
Алгоритм програми
Початок
Вибрати пункт меню.
Якщо вибрано пункт меню "Зчитати з файлу ", то повторювати такі дії:
Відкрити файл для читання.
Зчитати кількість міст
Зчитати значення ваг ребер
Закрити файл.
Якщо вибрано пункт меню «Введення з клавіатури», то повторювати такі дії:
Ввести кількість міст
Ввести матрицю ваг ребер.
Якщо вибрано пункт меню «Розв’язання», то повторювати такі дії
Спростити матрицю і визначити нижню межу умови задачі
Запустити рекурсивний алгоритм побудови дерева і розрахувати оптимальний шлях
Відобразити маршрут, сортуючи його у зручному порядку
Кінець
Алгоритм функції, яка реалізує алгоритм Літтла
Якщо матриця має розмір , то
додати до маршруту 2 ребра.
Повернути значення мінімального маршруту
Знайти ребро по якому будемо розбивати множини маршрутів
Заповнити праве піддерево дерева гілкування
Заповнити ліве піддерево дерева гілкування
Оцінити межі лівого та правого піддерева
Якщо межа лівого піддерева менше мінімальної відстані, то піддати подальшому гілкуванню ліве піддерево, праве піддерево не розглядати, тобто відкинути.
Якщо межа правого піддерева менше мінімальної відстані, то піддати подальшому гілкуванню праве піддерево, ліве піддерево не розглядати,тобто відкинути.
Алгоритм функції, яка додає до шляху 2 останніх ребра, які залишаться на останньому кроці алгориту
Присвоїти лічильнику рядків значення 0, поки він менший кількості міст, повторювати такі дії:
Присвоїти номеру вершини, з якого виходить ребро значення лічильника рядків
Присвоїти лічильнику стовпців значення 0, поки він менший кількості міст, повторювати такі дії:
Присвоїти номеру вершини, в яке входить ребро значення лічильника стовпців.
Якщо поточний елемент матриці ваг ребер дорівнює 0, додати ребро до шляху
Збільшити значення лічильника стовпців на 1
Збільшити значення лічильника рядків на 1
Повернути змінну структурного типу, що містить вагу ребра та його номер.
Алгоритм функції, яка ”спрощує” матрицю ваг ребер
Присвоїти лічильнику рядків значення 0, поки він менший кількості міст, повторювати такі дії:
Присвоїти мінімальній довжині маршруту значення " "
Присвоїти лічильнику стовпців значення 0, поки він менший кількості міст, повторювати такі дії:
Знайти мінімальний елемент в рядку
Збільшити значення лічильника стовпців на 1
Збільшити значення лічильника рядків на 1
Присвоїти лічильнику рядків значення 0, поки він менший кількості міст, повторювати такі дії:
Зменшити кожен елемент рядка на розмір мінімального в цьому рядку
Додати до суми констант приведення мінімальну відстань
Присвоїти лічильнику стовпців значення 0, поки він менший кількості міст, повторювати такі дії:
Присвоїти мінімальній довжині маршруту значення " "
Присвоїти лічильнику рядків значення 0, поки він менший кількості міст, повторювати такі дії:
Знайти мінімальний елемент в стовпці
Збільшити значення лічильника рядків на 1
Збільшити значення лічильника стовпців на 1
Присвоїти лічильнику стовпців значення 0, поки він менший кількості міст, повторювати такі дії:
Зменшити кожен елемент стовпця на розмір мінімального в цьому стовпці
Додати до суми констант приведення мінімальну відстань
Повернути суму констант приведення(оцінку знизу)
Алгоритм функції, яка знаходить найоптимальніше ребро
Присвоїти лічильнику рядків значення 0, поки він менший кількості міст, повторювати такі дії:
Присвоїти мінімальній довжині маршруту значення " "
Присвоїти лічильнику стовпців значення 0, поки він менший кількості міст, повторювати такі дії:
Якщо елемент дорівнює 0, зберегти номери інцидентних ребру вершин
Оцінити ребро
Якщо ціна ребра більша за попередню, встановити нову ціну
Вибрати краще ребро
Збільшити значення лічильника стовпців на 1
Збільшити значення лічильника рядків на 1
Повернути змінну структурного типу, що містить вагу ребра та його номер.
Алгоритм функції побудови множини, що не включає поточне ребро
Видалити з обрахунку матриці лише відповідний елемент, присвоюючи йому значення нескінченності " "
Повернути результуючу матрицю
Алгоритм функції побудови множини, що включає поточне ребро
Присвоїти лічильнику стовпців значення 0, поки він менший кількості міст, повторювати такі дії:
Присвоїти значення елементів стовпця " "
Присвоїти лічильнику рядків значення 0, поки він менший кількості міст, повторювати такі дії:
Присвоїти значення елементів рядка " "
Збільшити значення лічильника рядків на 1
Збільшити значення лічильника стовпців на 1
Повернути результуючу матрицю
Алгоритм функції, яка знаходить елемент, який буде передчасно завершувати цикл
Ініціалізувати елемент, який передчасно буде завершувати цикл, симетричним відносно нуля з найбільшою оцінкою
Присвоїти лічильнику ребер значення 0, поки він менший кількості ребер, повторювати такі дії:
Присвоїти другому лічильнику значення 0, поки він менший кількості ребер, повторювати такі дії:
Якщо пункт призначення вже існує в маршруті зробити його пунктом відправлення
Збільшити значення другого лічильника на 1
Збільшити значення лічильника ребер на 1
Повернути змінну структурного типу, що містить комбінацію шляху відправлення та призначення, яка буде закінчувати цикл
Алгоритм функції, яка відображає маршрут у порядку, послідовно через вказані
Присвоїти лічильнику значення 0, поки він менший кількості міст, повторювати такі дії:
Вивести номери інцидентних вершин ребру, через яке проходить маршрут
Поки початкова вершина не дорівнює кінцевій повторювати такі дії:
Присвоїти лічильнику міст значення 0, поки він менший кількості міст, повторювати такі дії:
Вивести поточний номер вершини та символ “->”
Повернути змінну структурного типу, що містить комбінацію шляху відправлення та призначення, яка буде закінчувати цикл
Алгоритм функції, яка виводить матрицю
Присвоїти лічильнику рядків значення 0, поки він менший кількості міст, повторювати такі дії:
Присвоїти мінімальній довжині маршруту значення " "
Присвоїти лічильнику стовпців значення 0, поки він менший кількості міст, повторювати такі дії:
Якщо елемент матриці не дорівнює " ", то вивести його
Інакше вивести “-”
Збільшити значення лічильника стовпців на 1
Збільшити значення лічильника рядків на 1
Відеокопії екрана
Приклад 1.
Приклад 2.
Аналіз достовірності результатів
При обробці вхідних даних програма перебирає можливі варіанти обходу комівояжера через всі міста по одному разу, відкидаючи не оптимальні шляхи. Отриманий результат відповідає мінімальному шляху обходу комівояжера. Отже програма працює вірно і знаходить необхідний розв’язок.
Задача “Бики та корови ”
Умова задачі [2]
Класичний варіант даної гри передбачає відгадування чотиризначного числа за мінімальну кількість спорб. У числі всі цифри мають бути у межах від 0 до 9 та ні в якому разі не повторюватися.
Гра відбувається таким чином, один із гравців загадує чотиризначне число, яке задовольняє вищенаведеним умовам, а інший, користуючись підказками першого, має відгадати це число за найменшу кількість ходів. Підказки полягають у тому, що той що загадує у відповідь на проголошене відгадуючим число вказує скільки биків і корів у названому відгадуючим числі. Биками прийнято називати цифри у названому відгадуючим числі, котрі співпадають по значенню і стоять на тих же місцях у загаданаму числі, а коровами – числа котрі співпадають по значенню, та стоять не на своєму місці. Сума биків і корів не перевищує 4.
Приклад
Загадане число 5841
Спроба відгадати 2431
Підказка загадуючого – 1 бик (цифра 1, є і в загаданому і у відгадуваному числі і стоїть на четвертій позиції), 1 корова (цифра 4, є і у одному і у другому числі, але стоять на різних позиціях). Гра завершується тоді, коли у названому відгадуючим числі буде 4 бики – 4 цифри що співпадають по значенню з цифрами загаданого числа, і стоять на своєму місці.
«Бики і Корови» модифікована.[2] Модифікація гри полягає у тому, що в ній використовуються цифри не від 0 до 9, а від 1 до 6, а також допускається повторення цифр в межах одного числа.
Комп'ютер повинен відгадати послідовність, використовуючи інформацію, яку він отримує з відповідей людини. Комп'ютер відображує на екрані послідовність, а користувач повинен відповісти (використовуючи для введення відповіді клавіатуру) на два питання:
скільки правильних кольорів(цифр) на неправильних місцях;
скільки правильних кольорів(цифр) на правильних місцях.
