DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

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

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

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

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

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

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

Міністерство освіти та науки України Національний університет “Львівська політехніка” Інститут прикладної математики і фундаментальних наук Кафедра прикладної математики Лабораторна робота № 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;} Результат виконання:  Висновок: На лабораторній роботі я навчився реалізовувати алгоритм Форда-Фалкерсона знаходження максимального потоку в транспортній мережі.
Антиботан аватар за замовчуванням

2015

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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