DevioLabавтоматичне керування капіталом
ПРАЦЮЄ 24/7
КРИПТОВАЛЮТИ · АКЦІЇ · 10 БІРЖ

Портфель, який керується автоматично

DevioLab підбирає стратегії, відстежує ринки та автоматизує купівлю і продаж активів. Кількість доступних криптовалют, акцій і торгових можливостей зростає щодня.

10підключених біржCrypto + Stocksв одному портфелі24/7автоматичний контроль

Лабораторна робота № 3: Знаходження максимального потоку в транспортній мережі

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

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

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

Рік:
2007
Тип роботи:
Лабораторна робота
Предмет:
Математика
Група:
ПМ-22
Коротко про документ

Про що ця робота

У документі наведено виконання лабораторної роботи з пошуку максимального потоку в транспортній мережі мовою C. Розроблено програму для реалізації алгоритму та подано висновок.

У роботі розглядаються

  • Максимальний потік
  • Транспортна мережа
  • Алгоритм Форда-Фалкерсона
  • Мова програмування C
  • Матриця пропускних спроможностей

Зміст і розділи

  1. Умова задачі
  2. Текст програми
  3. Результат виконання
  4. Висновок
Для кого:Студенти технічних та математичних спеціальностей вищих навчальних закладів.
Викладачі:Викладач кафедри прикладної математики

Ключові поняття

максимальний потіктранспортна мережаалгоритмграфвершинаребропропускна спроможністьматрицяфункціямова C

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

Міністерство освіти та науки України Національний університет “Львівська політехніка” Інститут прикладної математики і фундаментальних наук Кафедра прикладної математики Лабораторна робота № 3 Знаходження максимального потоку в транспортній мережі Львів 2007 Умова задачі: 5.6. Знайти потік найбільшої величини для транспортної сітки: 01 12 23 15 05 06 76 57 68 78 37 34 56 48 49 89 4z 9z  7 10 15 4 10 11 17 18 21 23 19 14 15 17 10 19 19 25   Текст програми: #include <conio.h> #include <stdio.h> #include <iostream.h> //----------------------CONSTANTS AND VARIABLES------------ const kilver=11; //kilkist vershyn int x0=0; //pochatkova vershyna int z=10; //kinceva vershyna int c[kilver][kilver]={ //matrycya propusknyh spromognostey V-25 {0, 7, 0, 0, 0,10,11, 0, 0, 0, 0}, {0, 0,10, 0, 0, 4, 0, 0, 0, 0, 0}, {0, 0, 0,15, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0,14, 0, 0,19, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0,17,10,19}, {0, 0, 0, 0, 0, 0,15,18, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0,21, 0, 0}, {0, 0, 0, 0, 0, 0,17, 0,23, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0,19, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0,25}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0} }; struct tochka { int nomer; int vidmichena; int znak; }; int pomicheni[kilver]; //masyp pomichenyh vershyn int f[kilver][kilver]; //matrycya potokiv po rebrah int potic; //max potik cherez meregu tochka path[kilver]; //masyv v jakomu vidobragaetsja shljah int pathlen; //dovgyna vybranogo shlyahu //----------------------FUNCTION PROTOTYPES---------------- void initialization(void); void pershyj_etap(void); void drugyj_etap(void); void vyvid(void); //void findpath(void); int min(tochka *path, int pathlen); //----------------------MAIN------------------------------- void main(void) {clrscr(); initialization(); pershyj_etap(); drugyj_etap(); vyvid(); getch();} //----------------------FUNCTION BODIES-------------------- void initialization(void) {potic=0; pathlen=0; for(int i=0; i<kilver; i++) { for(int j; j<kilver; j++) {f[i][j]=0;}; path[i].nomer=-1; pomicheni[i]=-1; } path[0].nomer=0;} //---------------------- void pershyj_etap(void) {int i; for (i=0;i<kilver;i++){path[i].znak=0;path[i].vidmichena=0;}; int pr=1; //praporec, vidpovidae za isnuvannya shljahu int minchyslo; for(;pr==1;) { for(int u=0;u<kilver;u++){path[u].nomer=-1;}; path[0].nomer=0; pathlen=0; i=0; for(;path[pathlen].nomer!=z;)//znahogennya shlyahu { for(int j=0;j<kilver;j++) //vybyraem nastupnu (sumignu) { pr=0; //shlyah ne isnue if(c[path[pathlen].nomer][j]-f[path[pathlen].nomer][j]>0) {//perevirka chy sumigne i chy propuskae she shos path[pathlen+1].nomer=j;/*path[j].vidmichena=1;break;*/ pathlen++; pr=1; //shlyah isnue i=path[pathlen].nomer; break; } } if(pr==0){break;}; }//for i if(pr==1) { minchyslo = min(path,pathlen); potic+=minchyslo; for(int i=0;i<pathlen;i++) { f[path[i].nomer][path[i+1].nomer]+=minchyslo; } pathlen=0; } }//for pr==1 } //---------------------- int min(tochka *path, int pathlen) {int ret=c[0][path[1].nomer]-f[0][path[1].nomer]; for(int i=1;i<pathlen+1;i++) { if((path[i+1].znak==1)+(path[i+1].vidmichena==0)==1) { if(c[path[i].nomer][path[i+1].nomer]-f[path[i].nomer][path[i+1].nomer]<ret) {ret=c[path[i].nomer][path[i+1].nomer]-f[path[i].nomer][path[i+1].nomer];}; } if(path[i+1].znak==-1) { if(f[path[i].nomer][path[i+1].nomer]<ret) {ret=f[path[i+1].nomer][path[i].nomer];}; } } return ret;} //---------------------- void drugyj_etap(void) {int i; for (i=0;i<kilver;i++){path[i].znak=0;path[i].vidmichena=-1;}; int pr=1; //praporec, vidpovidae za isnuvannya shljahu int minchyslo; int br; for(;pr==1;) { for(int u=0;u<kilver;u++) {path[u].nomer=-1;path[u].vidmichena=-1;path[u].znak=0;pomicheni[u]=-1;}; path[0].nomer=0; path[0].vidmichena=0; pomicheni[0]=1; pathlen=0; i=0; for(;path[pathlen].nomer!=z;)//znahogennya shlyahu { for(int j=kilver-1;j>=0;j--) //vybyraem nastupnu (sumignu) { pr=0; //shlyah ne isnue br=0; if((c[i][j]-f[i][j] >0)*(pomicheni[j]<0)==1) {//perevirka chy sumigne i chy propuskae she shos path[pathlen+1].vidmichena=path[pathlen].nomer; path[pathlen+1].znak=1; path[pathlen+1].nomer=j;/*path[j].vidmichena=1;break;*/ pomicheni[j]=1; pathlen++; pr=1; //shlyah isnue i=path[pathlen].nomer; br=1; } if((f[j][i]>0)*(pomicheni[j]<0)==1) { path[pathlen+1].vidmichena=path[pathlen].nomer; path[pathlen+1].znak=-1; path[pathlen+1].nomer=j;/*path[j].vidmichena=1;break;*/ pomicheni[j]=1; pathlen++; pr=1; //shlyah isnue i=path[pathlen].nomer; br=1; } if(br==1){break;}; } if(pr==0){break;}; }//for i if(pr==1) { minchyslo = min(path,pathlen); potic+=minchyslo; for(int i=0;i<pathlen;i++) { if(path[i+1].znak==1) { f[path[i].nomer][path[i+1].nomer]+=minchyslo; } if(path[i+1].znak==-1) { f[path[i+1].nomer][path[i].nomer]-=minchyslo; } } pathlen=0; } }//for pr==1 } //---------------------- void vyvid(void) {cout<<"\nMaksymalnyj potic cherez transportnu meregu F = "<<potic;} Результат виконання:  Висновок: На лабораторній роботі я навчився реалізовувати алгоритм Форда-Фалкерсона знаходження максимального потоку в транспортній мережі.
Допоможи студентському архіву

Ми допомогли тобі — допоможи наступному студенту

Файл ще не обрано

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

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

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

Admin

26.02.2023 12:38

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