dm_lab_3
.docxЛабораторная работа №3
Ст.гр. Инф 12-1
Мирошниченко Я.Р.
Задание:
Реализовать алгоритм Форда Фалкерсона по графу:
Код программы: Скриншот программы:
#include "stdafx.h"
#include <iostream>
#include <locale.h>
using namespace std;
int const n(9),m(3),p(9);
void name(int k)
{
if(k==0)cout<<"x->";
if(k==1)cout<<"a->";
if(k==2)cout<<"d->";
if(k==3)cout<<"c->";
if(k==4)cout<<"g->";
if(k==5)cout<<"f->";
if(k==6)cout<<"b->";
if(k==7)cout<<"e->";
if(k==8)cout<<"y->";
}
void prosmotr(bool **grafBull,int graf[n][n][m])
{ int k=0;
for(int j=0;j<n;j++)
for(int i=0;i<n;++i)
if(graf[k][i][0]==1 && graf[k][i][2]>graf[k][i][1]&&grafBull[k][i]==false)
{
grafBull[k][i]=true;
name(k);
k=i;
cout<<" ";
//i=0;
if(k==8)break;
}
}
void recurseon(int graf[n][n][m],bool **grafBull)
{ int k=0;
int rozn=0;
int m(0);
prosmotr(grafBull,graf);
for(int i=0;i<n;++i)
if(graf[k][i][0]==1 && graf[k][i][2]>graf[k][i][1]&&grafBull[k][i]==true)
{
rozn=graf[k][i][2]-graf[k][i][1];
if(rozn>m)
{
name(k);
cout<<" ";
m=rozn;
graf[k][i][1]=graf[k][i][1]+m;}
cout<<graf[k][i][1]<<" Из "<<graf[k][i][2]<<"\n";
}
}
void main()
{
setlocale(LC_ALL,"Russian");
int graf[n][n][m]={ 0,0,0,1,1,3,1,2,3,1,4,5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,1,1,4,0,0,0,1,1,3,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,1,1,3,0,0,0,0,0,0,0,0,0,1,2,3,0,0,0,
0,0,0,1,1,3,0,0,0,0,0,0,0,0,0,1,2,3,0,0,0,0,0,0,1,2,3,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,3,1,0,3,0,0,0,1,1,3,
0,0,0,0,0,0,1,1,3,0,0,0,0,0,0,0,0,0,0,0,0,1,0,3,1,1,3,
0,0,0,0,0,0,0,0,0,0,0,0,1,0,3,0,0,0,0,0,0,0,0,0,1,1,3,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,3,0,0,0,0,0,0,1,2,2,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, };
// int x[n][n];// состояни вектора. 0-непросматривался.1просматривался.3-забит поток.
int k=0;
bool **grafBull=new bool*[n]; //створюємо масив покажчиків
for(int i=0;i<n;i++)
grafBull[i]=new bool[n];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
grafBull[i][j]=false;
for(int i=0;i<n;++i)
recurseon(graf, grafBull);
cin.get();
}