Розрахункова робота ТА

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКНІ
Факультет:
Комп’ютерні науки
Кафедра:
АСУ

Інформація про роботу

Рік:
2013
Тип роботи:
Розрахункова робота
Предмет:
Теорiя алгоритмiв i математичнi основи представленння знань
Група:
КН 2
Варіант:
5

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти та науки України Національний університет «Львівська політехніка»  Розрахункова робота З теорії алгоритмів Варіант №5 Завдання: Знайдіть у цьому лабіринті такий маршрут, щоб сума всіх “зібраних” на перехрестях чисел дорівнювала 40. Через кожне перехрестя можна проходити лише один раз.  Алгоритм: Створюємо копію початкового масиву, з якою і будемо працювати Перевіряємо чи сума цифр більша ніж задана. Якщо більша, то завершуємо програму (щлях вибрано не правильно) Якщо менше, то додаємо поточний елемент і відмічаємо пройдений елемент. Перевіряємо чи поточна клітинка є останньою і сума така як задана Якщо так, то виводимо увесь відмічений шлях і завершуємо програму. Якщо ні, то переходимо до іншого перехрестя і йдемо на крок 2 Текст програми: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <locale.h> #define MAXX 5 #define MAXY 7 #define STARTX 3 #define STARTY 1 #define FINX 0 #define FINY 5 #define FINSUM 40 // тут зберігається граф int aa[MAXX][MAXY] = { // 0 1 2 3 4 5 6 /*0*/ {-1,-1, 6, 4, 0, 0,-1}, /*1*/ {-1, 1, 9, 0, 6, 9,-1}, /*2*/ { 3, 6, 4, 2, 5, 3, 0}, /*3*/ {-2, 7, 8, 1, 0, 7,-1}, /*4*/ {-1,-1, 0, 6, 3,-1,-1}}; // вивід графа void show_matrix(int a[MAXX][MAXY]) { for(int x=0;x<MAXX;x++) for(int y=0;y<MAXY;y++) { printf( "%2d ", a[x][y] ); if(y==MAXY-1) printf( "\n" ); } } // рекурсивна функція обходу масива void array_walk(int x, int y, int sum, int a[MAXX][MAXY]) { // клонумо масив у newa int newa[MAXX][MAXY]; memcpy(newa, a, sizeof(newa)); // якщо сума вже більша за потрібну, рухатись далі нема змісту if(sum>FINSUM) return; sum+=newa[x][y]; // додаємо до суми поточне значення newa[x][y]=-2; // відмічаємо пройдену клітинку // якщо остання клітинка if((sum==FINSUM)&&(x==FINX)&&(y==FINY)) { printf("\n Sum: %d \n", sum); printf(" Way: \n"); // вивід кінцевої матриці із шляхом, відміченим '-2' show_matrix(a); return; } // визначення можливих клітинок та рух по них if((x<MAXX-1)&&(a[x+1][y]>=0)) array_walk(x+1,y,sum,newa); if((y<MAXY-1)&&(a[x][y+1]>=0)) array_walk(x,y+1,sum,newa); if((x>0)&&(a[x-1][y]>=0)) array_walk(x-1,y,sum,newa); if((y>0)&&(a[x][y-1]>=0)) array_walk(x,y-1,sum,newa); } int main(void) { setlocale(LC_ALL, "Ukrainian"); printf( "\n Input:\n" ); show_matrix(aa); printf( "\n Press Enter...\n" ); getchar(); array_walk(STARTX,STARTY,0,aa); getchar(); return 0; } / /
Антиботан аватар за замовчуванням

24.04.2014 23:04-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!