Число ляхів

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

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

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

Рік:
2024
Тип роботи:
Лабораторна робота
Предмет:
Дискретна математика

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

Умова задачі: Знайти число шляхів, які відповідають деякій трійці невідємних чисел α, β, γ для матриці суміжності . Документація: Шляхом є послідовність вершин у графі G, яку необхідно пройти з хi в xj – вершину. Довжиною шляху буде кількість ребер пройдених з початку шляху х[і] в кінець шляху x[j]. Число шляхів довжиною n з хі в xj – вершину дорівнює (An)ij, де А – задана матриця суміжності графа G. Наприклад: При запуску програма виводить нам на екран / Після введення потужності множини наша програма просить ввести значення матриці суміжності (у випадку введення не 1 та 0 програма вказує, що величинами повинні бути тільки 1 або 0, після чого продовжуємо роботу) / Ввівши множину, програма показує нам нашу матрицю суміжності і просить ввести початок шляху / Після введення шляху, вводимо кінець шляху, а після цього довжину шляху. В результаті програма виводить результат / Наша програма завершена. Код програми: #include <iostream> #include <ctype.h> using namespace std; void CreateMatrix(int **, int &); void PrintMatrix(int **, int &); void MultiplayMatrix(int **, int **, int **, int &); void EqualMatrix(int **, int **, int &); void FindPath(int **, int **, int **, int &n); int main() { char quant; int **a, **b, **res, n; while(true) { try { fflush(stdout); cout << "Vvedit potuzhnist: "; cin >> quant; if(isalpha(quant) || quant - '0' <= 0) throw "Nedopustyme znathennja potuzhnosti!"; else { n = quant - '0'; break; } } catch(char *e) { cout << e << endl; char ch; cout << "Natysnit knopku: "; cin >> ch; } } a = new int*[n]; for(int i = 0; i < n; i++) a[i] = new int[n]; b = new int*[n]; for(int i = 0; i < n; i++) b[i] = new int[n]; res = new int*[n]; for(int i = 0; i < n; i++) res[i] = new int[n]; CreateMatrix(a, n); PrintMatrix(a, n); EqualMatrix(a, b, n); FindPath(res, a, b, n); for(int i = 0; i < n; i++) delete a[i]; delete []a; for(int i = 0; i < n; i++) delete b[i]; delete []b; for(int i = 0; i < n; i++) delete res[i]; delete []res; system("pause"); return 0; } void CreateMatrix(int **a, int &n) { for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { try { char v; cout << "a[" << i << "][" << j << "] = ";cin >> v; if((v != '0') && (v != '1')) throw "Velythyna povynna buty 1 abo 0!"; else a[i][j] = (int)(v - '0'); } catch(const char *msg) { cout << "Vykluthennja: " << msg << endl; j--; } } } } void PrintMatrix(int **a, int &n) { cout << " "; for(int l = 0; l < n; l++) cout << l << " "; cout << endl; for(int i = 0; i < n; i++) { cout << i << "|"; for(int j = 0; j < n; j++) { cout << a[i][j] << " "; if(j == (n-1)) cout << endl; } } } void MultiplayMatrix(int **res, int **a, int **b, int &n) { for(int k = 0; k < n; k++) { for(int i = 0; i < n; i++) { res[k][i] = 0; for(int j = 0; j < n; j++) { res[k][i] += b[k][j]*a[j][i]; } } } EqualMatrix(res, b, n); } void FindPath(int **res, int **a, int **b,int &n) { char start, end, dist; while(true) { try { cout << "Pothatok shljachu: "; cin >> start; if(isdigit(start - '0') || start - '0' < 0 || start - '0' > n - 1) throw "Pomylka!"; else break; } catch(char *e) { cout << e << endl; char ch; cout << "Natysnit knopku: "; cin >> ch; } } while(true) { try { cout << "Kinez shljachu: "; cin >> end; if(isdigit(end - '0') || end - '0' < 0 || end - '0' > n - 1) throw "Pomylka!"; else break; } catch(char *e) { cout << e << endl; char ch; cout << "Natysnit knopku: "; cin >> ch; } } while(true) { try { cout << "Dovzhyna shljacu: "; cin >> dist; if(isdigit(dist - '0') || dist - '0' < 0) throw "Pomylka!"; else break; } catch(char *e) { cout << e << endl; char ch; cout << "Natysnit knopku: "; cin >> ch; } } cout << dist - '0' << endl; for(int i = 0; i < (dist - '0') - 1; i++) { MultiplayMatrix(res, a , b, n); } PrintMatrix(res, n); cout << "Kilkist shljachiv z (" << start - '0' << ") do (" << end - '0' << ") z vidstanju " << dist - '0' << " he: " << b[start - '0'][end - '0'] << endl; } void EqualMatrix(int **a, int **b, int &n) { for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) b[i][j] = a[i][j]; }
Антиботан аватар за замовчуванням

22.09.2013 12:09-

Коментарі

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

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

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

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

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

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

Admin

26.02.2023 12:38

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