Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

dm_lab_3

.docx
Скачиваний:
14
Добавлен:
19.01.2015
Размер:
36.85 Кб
Скачать

Лабораторная работа №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();

}

Соседние файлы в предмете Дискретная математика