Поиск максимальных потоков в сетях

Основные понятия и определения теории графов. Представление графов с помощью матриц. Задача о максимальном потоке. Алгоритм решения задачи о максимальном потоке. Графы со многими источниками и стоками. Автоматизация поиска максимальных потоков в сетях.

Рубрика Математика
Вид дипломная работа
Язык русский
Дата добавления 27.02.2020
Размер файла 1,2 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

5. Просмотрим вершины, смежные с вершиной v3. Из вершин, смежных с вершиной v3, не помечена только вершина v5. Вершине v5 присваиваем пометку (+v3, 1), поскольку ц(v3, v5) = 2 < 4 = с4.

6. Просмотрим вершины, смежные с вершиной v4. Смежной и непомеченной является вершина v6. Присваиваем ей пометку (+v4, 1), поскольку ц(v4, v6) = 1 < 4 = с5.

7. Просмотрим вершины, смежные с вершиной v5. Смежной и непомеченной является вершина v7. Присваиваем ей пометку (+v5, 1), поскольку ц(v5, v7) = 2 < 3 = с6.

8. Просмотрим вершины, смежные с вершиной v6. Смежной и непомеченной является вершина v8. Присваиваем ей пометку (+v6, 1), поскольку ц(v6, v8) = 2 < 5 = с7. Сток помечен. Переходим к операции Б - увеличению потока.

9. Сток имеет пометку (+v6, 1). Поэтому увеличиваем поток по дуге (v6, v8) на 1.

10. Вершина v6 имеет пометку (+v4, 1). Поэтому увеличиваем поток по дуге (v4, v6) на 1.

11. . Вершина v4 имеет пометку (+v2, 1). Поэтому увеличиваем поток по дуге (v2, v4) на 1.

12. . Вершина v2 имеет пометку (+v1, 1). Поэтому увеличиваем поток по дуге (v1, v2) на 1. Мы получили новый поток величины 4 (рис. 3.9).

Рис. 3.9. Поток величины 4

13. Стираем все пометки.

14. Присваиваем вершине v1 пометку (+, ?).

15. Просмотрим вершины, смежные с вершиной v1. Вершину v2 не помечаем, поскольку ц(v1, v2) = 3 = c(e1), а вершине v3 присваиваем пометку (+v1, 1).

16. Просмотрим вершины, смежные с вершиной v3. Вершине v2 присваиваем пометку (-v3, 1), поскольку ц(v2, v3) = 1 > 0, l(v) = 1 и min(1, 1) = 1, а вершине v5 припишем пометку (+v3, 1), так как ц(v3, v5) = 2 < 4 = c8.

17. Просмотрим вершины, смежные с вершиной v4. Вершине v6 присваиваем пометку (+v4, 1), поскольку ц(v4, v6) = 3 < 5 = с9.

18. Просмотрим вершины, смежные с вершиной v5. Вершине v7 присваиваем пометку (+v5, 1), поскольку ц(v5, v7) = 2 < 3 = с10.

19. Просмотрим вершины, смежные с вершиной v6. Вершине v8 присваиваем пометку (+v6, 1), поскольку ц(v6, v8) = 3 < 5 = с11. Сток помечен. Переходим к операции Б - увеличению потока.

20. Сток имеет пометку (+v6, 1). Поэтому увеличиваем поток по дуге (v6, v8) на 1.

21. Вершина v6 имеет пометку (+v4, 1). Поэтому увеличиваем поток по дуге (v4, v6) на 1.

22. Вершина v4 имеет пометку (+v2, 1). Поэтому увеличиваем поток по дуге (v2, v4) на 1.

23. Вершина v2 имеет пометку (-v3, 1). Поэтому уменьшаем поток по дуге (v2, v3) на 1.

24. Вершина v3 имеет пометку (+v1, 1). Поэтому увеличиваем поток по дуге (v1, v3) на 1. Получили новый поток величины 5 (рис. 3.10).

Рис. 3.10. Поток величины 5

25. Стираем все пометки.

26. Присваиваем вершине v1 пометку (+, ?).

27. Вершины, смежные вершине v1, нельзя пометить, поскольку дуга (v1, v2) насыщена - ц(v1, v2) = ц(е1) = с(е1) = 3, и дуга (v1, v3) тоже насыщена - ц(v1, v3) = ц(е2) = с(е2) = 2. Сток остался непомеченным. Значит, полученный поток максимален.

А теперь найдём максимальный поток с помощью программы. Для этого введём матрицу пропускных способностей в соответствующие поля программы. Матрица имеет следующий вид:

Результат вычислений оказался тем же. Мы получили максимальный поток величины 5 (рис. 3.11).

Рис. 3.11.

3.4 Описание программного кода

Прикладная программа Max_potоk написана языком Object Pascal в интегрированной среде Delphi7.

Окно программы (Form1: TForm) содержит такие компоненты:

- текстовые поля (Eij: TEdit ; Inij: TEdit (i,j = 1..10));

- компоненты (STy: TStaticText (y = 1..10), OSTx: TStaticText (x = 1..10), VSTz: TStaticText (z = 1..10), OVSTe: TStaticText (e = 1..10), StaticTextij: TStaticText (i = 4, j = 1..4));

- надписи (Label1, Label2, Label3: TLabel);

- панель группировки компонентов (GB1: TGroupBox);

- кнопки (Buttonk: TButton (k = 1..5)).

В программе отслеживается 7 действий (табл. 6).

Таблица 6

Название действия

Назначение

TButton1.Click

Рассчитывает максимальный поток

TButton2.Click

Создаёт таблицы матриц пропускных способностей и потока заданной размерности

TButton3.Click

Считает одну итерацию

TButton4.Click

Выводит пометки

TButton5.Click

Начинает итерацию заново

TForm1.Create

Задаёт высоту и ширину окна программы

TForm1.Close

Совершает затухание формы при её закрытии

Предназначение текстовых полей приведено в таблице 7.

Таблица 7

Метка поля

Название поля

Предназначение

Количество

Col

Задаётся количество вершин сети

s=

SSS

Задаётся источник сети

t=

TTT

Задаётся сток сети

Вершина

р1

Задаётся вершина, пометки которой будут рассчитываться

Предыдущая вершина

р2

Выводятся пометки вершины

Знак

р3

р4

Максимальный поток

max

Выводится максимальный поток сети

Xij

Inij

Задаётся матрица пропускных способностей сети

Xij

Eij

Выводится матрица потока в сети

ВЫВОДЫ

Решая жизненные практические задачи, мы неоднократно сталкиваемся с проблемой поиска максимальных потоков в сетях (поиск максимального потока машин в сети дорог без возникновения пробок, поиск максимального количества нефти, которую можно перекачать по трубопроводу и др.).

В данной работе изучалась эта проблема, была рассмотрена теория, которая изучает методы поиска максимальных потоков в сетях, изучен алгоритм поиска максимального потока (алгоритм Форда-Фалкерсона), в интегрированной среде Delphi было разработано дополнение, которое позволяет в удобной для пользователя форме найти максимальный поток в заданной сети.

Это дополнение может быть использовано при проведении практических занятий по теме ”Теория графов” для студентов специальностей “Математика” и “Информатика” при изучении дисциплины “Дискретная математика”, а также для проверки тестовых заданий по этой теме.

ЛИТЕРАТУРА

граф матрица максимальный поток

1. Алгоритмы и программы решения задач на графах и сетях. Отв. ред. М.И. Нечепуренко. - Новосибирск: Наука. Сиб. отделение, 1990. - 513 с.

2. Андрійчук В.І., Комарницький М.Я., Іщук Ю.Б. Вступ до дискретної математики: Навчальний посібник. - Київ: Центр навчальної літератури, 2004. - 254 с.

3. Архангельский А.Я. Приемы программирования в Delphi. Версии 5 - 7. М.: ЗАО «Издательство БИНОМ», 2003.

4. Дискретна математика: Підручник/ Ю.М. Бардачов, Н.А. Соколова, В.Є. Ходаков; за ред. В.Є. Ходакова. - К.: Вища шк., 2002. - 287 с.: іл.

5. Дискретная математика: логика, группы, графы/ О.Е. Акимов. - 2-е изд., доп. - М.: Лаборатория Базовых Знаний, 2003. - 376 с.: ил.

6. Зыков А.А. Основы теории графов. - М.: Наука, 1987. - 381 с.

7. Климова Л.М. Delphi 7. Основы программирования. Решение типовых задач. Самоучитель - М.: КУДИЦ-ОБРАЗ, 2004. - 480 с.

8. Крістофідес Р. “Теория графов”. Переклад на російську мову “Мир” 1978.

9. Лекции по дискретной математике/ Ю.В. Капитонова, С.Л. Кривой, А.А. Летичевский и др. - СПб.: БХВ-Петербург, 2004. - 624 с.

10. Лекции по теории графов/ Емеличев В.А., Мельниченков О.И., Сарванов В.И., Тышкевич Р.И. - М.: Наука, Гл. ред. физ.-мат. лит., 1990. - 384 с.

11. Лекции по теории графов: Учебн. пособие. - М.: Наука, 1990. - 384 с.

12. Липский В. Комбинаторика для программистов: Пер. с польск. - М.: Мир, 1988. - 213 с.: ил.

13. Магрупов Т.М. Графы, сети, алгоритмы и их приложения/ Под ред. Ф.Б. Абуталиева; АН УсССР, Ин-т кибернетики с ВЦ УзНПО “Кибернетика”: - Ташкент: Фан, 1990. - 120 с.

14. Математическое программирование (с элементами информационных технологий): Учеб. пособие для студ. нематемат. спец. вузов/ В.Р. Кулян, Е.А. Юнькова, А.Б. Жильцов. - К.: МАУП, 2000. - 124 с.: ил.

15. Мiхайленко В.М. Дискретна математика. - К.: Європейський ун-т, 2003. - 319.

16. Новиков Ф.А. Дискретная математика для программистов. - СПб.: Питер, 2004. - 302 с.: ил.

17. Седжвік Д. “Програмирование на С++. Часть 5. Алгоритмы на графах”. Київ, 2003.

18. Теория графов и её применение: сборник научных трудов/ Институт математики им. С.Л. Соболева. - Новосибирск, 1996. - 106 с.

19. Яблонский С.В. Введение в дискретную митематику. - М.: Наука, 1986. - 384 с.

ПРИЛОЖЕНИЕ

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, DBGrids, AxCtrls, OleCtrls, VCF1, ComCtrls, StdCtrls;

type

TForm1 = class(TForm)

E11: TEdit; E21: TEdit; E31: TEdit; E41: TEdit; E51: TEdit; E61: TEdit;

E71: TEdit; E81: TEdit; E91: TEdit; E101: TEdit; E12: TEdit; E22: TEdit;

E32: TEdit; E42: TEdit; E52: TEdit; E62: TEdit; E72: TEdit; E82: TEdit;

E92: TEdit; E102: TEdit; E13: TEdit; E23: TEdit; E33: TEdit; E43: TEdit;

E53: TEdit; E63: TEdit; E73: TEdit; E83: TEdit; E93: TEdit; E103: TEdit;

E14: TEdit; E24: TEdit; E34: TEdit; E44: TEdit; E54: TEdit; E64: TEdit;

E74: TEdit; E84: TEdit; E94: TEdit; E104: TEdit; E15: TEdit; E25: TEdit;

E35: TEdit; E45: TEdit; E55: TEdit; E65: TEdit; E75: TEdit; E85: TEdit;

E95: TEdit; E105: TEdit; E16: TEdit; E26: TEdit; E36: TEdit; E46: TEdit;

E56: TEdit; E66: TEdit; E76: TEdit; E86: TEdit; E96: TEdit; E106: TEdit;

E17: TEdit; E27: TEdit; E37: TEdit; E47: TEdit; E57: TEdit; E67: TEdit;

E77: TEdit; E87: TEdit; E97: TEdit; E107: TEdit; E18: TEdit; E28: TEdit;

E38: TEdit; E48: TEdit; E58: TEdit; E68: TEdit; E78: TEdit; E88: TEdit;

E98: TEdit; E108: TEdit; E19: TEdit; E29: TEdit; E39: TEdit; E49: TEdit;

E59: TEdit; E69: TEdit; E79: TEdit; E89: TEdit; E99: TEdit; E109: TEdit;

E110: TEdit; E210: TEdit; E310: TEdit; E410: TEdit; E510: TEdit;

E610: TEdit; E710: TEdit; E810: TEdit; E910: TEdit; E1010: TEdit;

In11: TEdit; In21: TEdit; In31: TEdit; In41: TEdit; In51: TEdit;

In61: TEdit; In71: TEdit; In81: TEdit; In91: TEdit; In101: TEdit;

In12: TEdit; In22: TEdit; In32: TEdit; In42: TEdit; In52: TEdit;

In62: TEdit; In72: TEdit; In82: TEdit; In92: TEdit; In102: TEdit;

In13: TEdit; In23: TEdit; In33: TEdit; In43: TEdit; In53: TEdit;

In63: TEdit; In73: TEdit; In83: TEdit; In93: TEdit; In103: TEdit;

In14: TEdit; In24: TEdit; In34: TEdit; In44: TEdit; In54: TEdit;

In64: TEdit; In74: TEdit; In84: TEdit; In94: TEdit; In104: TEdit;

In15: TEdit; In25: TEdit; In35: TEdit; In45: TEdit; In55: TEdit;

In65: TEdit; In75: TEdit; In85: TEdit; In95: TEdit; In105: TEdit;

In16: TEdit; In26: TEdit; In36: TEdit; In46: TEdit; In56: TEdit;

In66: TEdit; In76: TEdit; In86: TEdit; In96: TEdit; In106: TEdit;

In17: TEdit; In27: TEdit; In37: TEdit; In47: TEdit; In57: TEdit;

In67: TEdit; In77: TEdit; In87: TEdit; In97: TEdit; In107: TEdit;

In18: TEdit; In28: TEdit; In38: TEdit; In48: TEdit; In58: TEdit;

In68: TEdit; In78: TEdit; In88: TEdit; In98: TEdit; In108: TEdit;

In19: TEdit; In29: TEdit; In39: TEdit; In49: TEdit; In59: TEdit;

In69: TEdit; In79: TEdit; In89: TEdit; In99: TEdit; In109: TEdit;

In110: TEdit; In210: TEdit; In310: TEdit; In410: TEdit; In510: TEdit;

In610: TEdit; In710: TEdit; In810: TEdit; In910: TEdit; In1010: TEdit;

ST1: TStaticText; ST2: TStaticText; ST3: TStaticText; ST4: TStaticText;

ST5: TStaticText; ST6: TStaticText; ST7: TStaticText; ST8: TStaticText;

ST9: TStaticText; ST10: TStaticText; OST1: TStaticText;

OST4: TStaticText; OST3: TStaticText; OST2: TStaticText;

OST5: TStaticText; OST6: TStaticText; OST7: TStaticText;

OST8: TStaticText; OST9: TStaticText; OST10: TStaticText;

VST1: TStaticText; VST2: TStaticText; VST3: TStaticText;

VST4: TStaticText; VST5: TStaticText; VST6: TStaticText;

VST7: TStaticText; VST8: TStaticText; VST9: TStaticText;

VST10: TStaticText; OVST1: TStaticText; OVST2: TStaticText;

OVST3: TStaticText; OVST4: TStaticText; OVST5: TStaticText;

OVST6: TStaticText; OVST7: TStaticText; OVST8: TStaticText;

OVST9: TStaticText; OVST10: TStaticText; SSS: TEdit;

StaticText41: TStaticText; TTT: TEdit; StaticText42: TStaticText;

Button1: TButton; StaticText43: TStaticText; StaticText44: TStaticText;

col: TEdit; label1: TLabel; Button2: TButton; Label2: TLabel;

max: TEdit; Button3: TButton; GB1: TGroupBox; Label3: TLabel;

Label4: TLabel; Label5: TLabel; Label6: TLabel; p1: TEdit;

p2: TEdit; p3: TEdit; p4: TEdit; Button4: TButton; Button5: TButton;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure FormClose(Sender: TObject; var Action: TCloseAction);

procedure FormCreate(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

function min(x,y: double): double;

const p1=10;

type

sign=(minus,plus);

ibool=0..1;

Rec=record

s:sign; {направление дуги}

n:1..p1; {предшествующая вершина в аугментальной цепи}

delta:double; {величина возможного увеличения потока}

end;

var

Form1: TForm1;

F: array of array of double;

P: array of Rec;

implementation

{$R *.dfm}

function min(x,y: double): double;

begin

if x < y then

Result := x

else

Result := y;

end;

procedure TForm1.Button1Click(Sender: TObject);

label M;

const p1=10;

type

sign=(minus,plus);

ibool=0..1;

Rec=record

s:sign; {направление дуги}

n:1..p1; {предшествующая вершина в аугментальной цепи}

delta:double; {величина возможного увеличения потока}

end;

var i,j: integer;

del,ch:double;

C,F: array of array of double;

P: array of Rec;

N,S: array of ibool;

a:ibool;

pp,s1,t1,x: byte;

input,output:array of array of TEdit;

begin

pp:=StrToInt(col.Text);

SetLength(input,pp);

SetLength(output,pp);

SetLength(C,pp);

SetLength(F,pp);

SetLength(P,pp);

SetLength(N,pp);

SetLength(S,pp);

for i:=0 to pp-1 do

begin

SetLength(input[i],pp);

SetLength(output[i],pp);

SetLength(C[i],pp);

SetLength(F[i],pp);

end;

for i:=1 to pp do

for j:=1 to pp do

begin

F[i-1,j-1] := 0; {вначале поток нулевой}

input[i-1,j-1]:=FindComponent(Format('In%d%d',[i,j])) as TEdit;

output[i-1,j-1]:=FindComponent(Format('E%d%d',[i,j])) as TEdit;

if input[i-1,j-1].Text<>'' then C[i-1,j-1]:=StrToFloat(input[i-1,j-1].Text)

else C[i-1,j-1]:=0;

end;

s1 := StrToInt(SSS.Text[2]);

if (s1=1) and (length(SSS.Text)=3) then

s1:=10;

t1 := StrToInt(TTT.Text[2]);

if (t1=1) and (length(TTT.Text)=3) then

t1:=10;

M: {итерация увеличения потока}

for i:=1 to pp do

begin

S[i-1] := 0;

N[i-1] := 0;

with P[i-1] do

begin

//s := null;

//n := nil;

delta := 0;

end;

end;

S[s1-1]:=1;

with P[s1-1] do

begin

s:=plus;

n:=s1;

end;

repeat

a:=0; {признак расширения S}

for i:=1 to pp do

begin

if (S[i-1]=1) and (N[i-1]=0) then

begin

for j:=1 to pp do

begin

if C[i-1,j-1]<>0 then

begin

if (S[j-1]=0) and (F[i-1,j-1] < C[i-1,j-1]) then

begin

S[j-1] := 1;

with P[j-1] do

begin

s := plus;

n := i;

if i=s1 then delta := C[i-1,j-1] - F[i-1,j-1]

else delta := min(P[i-1].delta,C[i-1,j-1] - F[i-1,j-1]);

end;

a := 1;

end;

end;

if C[j-1,i-1]<>0 then

begin

if (S[j-1]=0) and (F[j-1,i-1]>0) then

begin

S[j-1] := 1;

with P[j-1] do

begin

s := minus;

n := i;

if i=s1 then delta := F[j-1,i-1]

else delta := min(P[i-1].delta,F[j-1,i-1]);

end;

a:=1;

end;

end;

end;

N[i-1] := 1;

end;

end;

if S[t1-1]<>0 then

begin

x:=t1;

del:=P[t1-1].delta;

while x<>s1 do

begin

if P[x-1].s=plus then

F[P[x-1].n-1,x-1]:=F[P[x-1].n-1,x-1]+del

else

F[x-1,P[x-1].n-1]:=F[x-1,P[x-1].n-1]-del;

x:=P[x-1].n

end;

goto M;

end;

until a=0;

ch:=0;

for i:=1 to pp do

begin

ch:=ch+F[s1-1,i-1];

for j:=1 to pp do

begin

if C[i-1,j-1]<>0 then

output[i-1,j-1].Text := FloatToStr(F[i-1,j-1])

else

output[i-1,j-1].Text := '';

end;

end;

max.Text := FloatToStr(ch);

end;

//----------------------------------------------------

procedure TForm1.Button2Click(Sender: TObject);

const p1=10;

var InG,InV,OutG,OutV :array[1..p1] of TStaticText;

i,pp,j: byte;

input,output:array[1..p1,1..p1] of TEdit;

begin

SSS.Text:='';

TTT.Text:='';

max.Text:='';

pp:=StrToInt(Col.Text);

SetLength(F,pp);

for i:=1 to pp do

begin

SetLength(F[i-1],pp);

for j:=1 to pp do

F[i-1,j-1] := 0;

end;

for i:=1 to p1 do

begin

InG[i] := FindComponent(Format('ST%d',[i])) as TStaticText;

InV[i] := FindComponent(Format('VST%d',[i])) as TStaticText;

OutG[i] := FindComponent(Format('OST%d',[i])) as TStaticText;

OutV[i] := FindComponent(Format('OVST%d',[i])) as TStaticText;

if i<=pp then

begin

InG[i].Visible:=true;

InV[i].Visible:=true;

OutG[i].Visible:=true;

OutV[i].Visible:=true;

end

else

begin

InG[i].Visible:=false;

InV[i].Visible:=false;

OutG[i].Visible:=false;

OutV[i].Visible:=false;

end;

for j:=1 to p1 do

begin

input[i,j] := FindComponent(Format('In%d%d',[i,j])) as TEdit;

output[i,j] := FindComponent(Format('E%d%d',[i,j])) as TEdit;

if (i<=pp) and (j<=pp) then

begin

input[i,j].Visible:=true;

output[i,j].Visible:=true;

input[i,j].Text:='';

output[i,j].Text:='';

end

else

begin

input[i,j].Visible:=false;

output[i,j].Visible:=false;

end;

end;

end;

end;

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);

var

i, cavb : 0..255;

begin

if AlphaBlend=False then

begin

AlphaBlendValue:=255;

AlphaBlend:=True;

end;

cavb:=AlphaBlendValue;

for i := cavb downto 0 do

begin

AlphaBlendValue := i;

Application.ProcessMessages;

end

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

Form1.Height:=600;

Form1.Width:=800;

end;

procedure TForm1.Button3Click(Sender: TObject);

var i,j: integer;

del:double;

C: array of array of double;

N,S: array of ibool;

a:ibool;

pp,s1,t1,x: byte;

input,output:array of array of TEdit;

begin

p1.Text :='';

p2.Text :='';

p3.Text :='';

p4.Text :='';

pp:=StrToInt(col.Text);

SetLength(input,pp);

SetLength(output,pp);

SetLength(C,pp);

SetLength(P,pp);

SetLength(N,pp);

SetLength(S,pp);

for i:=0 to pp-1 do

begin

SetLength(input[i],pp);

SetLength(output[i],pp);

SetLength(C[i],pp);

end;

for i:=1 to pp do

for j:=1 to pp do

begin

input[i-1,j-1]:=FindComponent(Format('In%d%d',[i,j])) as TEdit;

output[i-1,j-1]:=FindComponent(Format('E%d%d',[i,j])) as TEdit;

if input[i-1,j-1].Text<>'' then C[i-1,j-1]:=StrToFloat(input[i-1,j-1].Text)

else C[i-1,j-1]:=0;

end;

s1 := StrToInt(SSS.Text[2]);

if (s1=1) and (length(SSS.Text)=3) then

s1:=10;

t1 := StrToInt(TTT.Text[2]);

if (t1=1) and (length(TTT.Text)=3) then

t1:=10;

for i:=1 to pp do

begin

S[i-1] := 0;

N[i-1] := 0;

with P[i-1] do

begin

//s := null;

//n := nil;

delta := 0;

end;

end;

S[s1-1]:=1;

with P[s1-1] do

begin

s:=plus;

n:=s1;

end;

repeat

a:=0; {признак расширения S}

for i:=1 to pp do

begin

if (S[i-1]=1) and (N[i-1]=0) then

begin

for j:=1 to pp do

begin

if C[i-1,j-1]<>0 then

begin

if (S[j-1]=0) and (F[i-1,j-1] < C[i-1,j-1]) then

begin

S[j-1] := 1;

with P[j-1] do

begin

s := plus;

n := i;

if i=s1 then delta := C[i-1,j-1] - F[i-1,j-1]

else delta := min(P[i-1].delta,C[i-1,j-1] - F[i-1,j-1]);

end;

a := 1;

end;

end;

if C[j-1,i-1]<>0 then

begin

if (S[j-1]=0) and (F[j-1,i-1]>0) then

begin

S[j-1] := 1;

with P[j-1] do

begin

s := minus;

n := i;

if i=s1 then delta := F[j-1,i-1]

else delta := min(P[i-1].delta,F[j-1,i-1]);

end;

a:=1;

end;

end;

end;

N[i-1] := 1;

end;

end;

if S[t1-1]<>0 then

begin

x:=t1;

del:=P[t1-1].delta;

while x<>s1 do

begin

if P[x-1].s=plus then

F[P[x-1].n-1,x-1]:=F[P[x-1].n-1,x-1]+del

else

F[x-1,P[x-1].n-1]:=F[x-1,P[x-1].n-1]-del;

x:=P[x-1].n

end;

Break;

end;

until a=0;

for i:=1 to pp do

begin

for j:=1 to pp do

begin

if C[i-1,j-1]<>0 then

output[i-1,j-1].Text := FloatToStr(F[i-1,j-1])

else

output[i-1,j-1].Text := '';

end;

end;

end;

procedure TForm1.Button4Click(Sender: TObject);

var s1,ver: byte; // Вершина

begin

p4.Font.Name := 'MS Sans Serif';

ver := StrToInt(p1.Text[2]);

if (ver=1) and (length(p1.Text)=3) then

ver:=10;

s1 := StrToInt(SSS.Text[2]);

if (s1=1) and (length(SSS.Text)=3) then

s1:=10;

if P[ver-1].s=plus then p3.Text := '+'

else p3.Text := '-';

p2.Text := 'x' + IntToStr(P[ver-1].n);

if ver<>s1 then

p4.Text := FloatToStr(P[ver-1].delta)

else

begin

p4.Font.Name :='Symbol';

p4.Text := 'Ґ';

end;

end;

procedure TForm1.Button5Click(Sender: TObject);

var pp,i,j : integer;

output:array of array of TEdit;

begin

pp:=StrToInt(Col.Text);

SetLength(F,pp);

SetLength(output,pp);

for i:=1 to pp do

begin

SetLength(output[i-1],pp);

SetLength(F[i-1],pp);

for j:=1 to pp do

begin

F[i-1,j-1] := 0;

output[i-1,j-1]:=FindComponent(Format('E%d%d',[i,j])) as TEdit;

output[i-1,j-1].Text := '';

end;

end;

end;

end.

Размещено на Allbest.ru

...

Подобные документы

  • Основные понятия теории графов. Маршруты и связность. Задача о кёнигсбергских мостах. Эйлеровы графы. Оценка числа эйлеровых графов. Алгоритм построения эйлеровой цепи в данном эйлеровом графе. Практическое применение теории графов в науке.

    курсовая работа [1006,8 K], добавлен 23.12.2007

  • Основные понятия теории графов. Расстояния в графах, диаметр, радиус и центр. Применение графов в практической деятельности человека. Определение кратчайших маршрутов. Эйлеровы и гамильтоновы графы. Элементы теории графов на факультативных занятиях.

    дипломная работа [145,5 K], добавлен 19.07.2011

  • Восстановление графов по заданным матрицам смежности вершин. Построение для каждого графа матрицы смежности ребер, инцидентности, достижимости, контрдостижимости. Поиск композиции графов. Определение локальных степеней вершин графа. Поиск базы графов.

    лабораторная работа [85,5 K], добавлен 09.01.2009

  • Основные понятия теории графов. Матричные способы задания графов. Выбор алгоритма Форда–Бэллмана для решения задачи поиска минимальных путей (маршрутов) в любую достижимую вершину нагруженного орграфа. Способы выделения пути с наименьшим числом дуг.

    курсовая работа [109,1 K], добавлен 22.01.2016

  • Основные понятия теории графов. Степень вершины. Маршруты, цепи, циклы. Связность и свойства ориентированных и плоских графов, алгоритм их распознавания, изоморфизм. Операции над ними. Обзор способов задания графов. Эйлеровый и гамильтоновый циклы.

    презентация [430,0 K], добавлен 19.11.2013

  • Математическое описание системы автоматического управления с помощью графов. Составление графа и его преобразование, избавление от дифференциалов. Оптимизации ориентированных и неориентированных графов, составления матриц смежности и инцидентности.

    лабораторная работа [42,2 K], добавлен 11.03.2012

  • Основные понятия, связанные с графом. Решение задачи Эйлера о семи кёнигсбергских мостах. Необходимые и достаточные условия для эйлеровых и полуэйлеровых графов. Применение теории графов к решению задач по математике; степени вершин и подсчёт рёбер.

    курсовая работа [713,8 K], добавлен 16.05.2016

  • Спектральная теория графов. Теоремы теории матриц и их применение к исследованию спектров графов. Определение и спектр предфрактального фрактального графов с затравкой регулярной степени. Связи между спектральными и структурными свойствами графов.

    дипломная работа [272,5 K], добавлен 05.06.2014

  • Общее понятие, основные свойства и закономерности графов. Задача о Кенигсбергских мостах. Свойства отношения достижимости в графах. Связность и компонента связности графов. Соотношение между количеством вершин связного плоского графа, формула Эйлера.

    презентация [150,3 K], добавлен 16.01.2015

  • Теория графов как математический аппарат для решения задач. Характеристика теории графов. Критерий существования обхода всех ребер графа без повторений, полученный Л. Эйлером при решении задачи о Кенигсбергских мостах. Алгоритм на графах Дейкстры.

    контрольная работа [466,3 K], добавлен 11.03.2011

  • История возникновения, основные понятия графа и их пояснение на примере. Графический или геометрический способ задания графов, понятие смежности и инцидентности. Элементы графа: висячая и изолированная вершины. Применение графов в повседневной жизни.

    курсовая работа [636,2 K], добавлен 20.12.2015

  • Теория графов как раздел дискретной математики, исследующий свойства конечных множеств с заданными отношениями между их элементами. Основные понятия теории графов. Матрицы смежности и инцидентности и их практическое применение при анализе решений.

    реферат [368,2 K], добавлен 13.06.2011

  • Понятие и матричное представление графов. Ориентированные и неориентированные графы. Опеределение матрицы смежности. Маршруты, цепи, циклы и их свойства. Метрические характеристики графа. Применение теории графов в различных областях науки и техники.

    курсовая работа [423,7 K], добавлен 21.02.2009

  • Граф как множество вершин (узлов), соединённых рёбрами, способы и сфера их применения. Специфика теории графов как раздела дискретной математики. Основные способы преобразования графов, их особенности и использование для решения математических задач.

    курсовая работа [1,8 M], добавлен 18.01.2013

  • Сущность и основные понятия теории графов, примеры и сферы ее использования. Формирование следствий из данных теорий и примеры их приложений. Методы разрешения задачи о кратчайшем пути, о нахождении максимального потока. Графическое изображение задачи.

    курсовая работа [577,1 K], добавлен 14.11.2009

  • Понятия теории графов. Понятия смежности, инцидентности и степени. Маршруты и пути. Матрицы смежности и инцедентности. Алгоритм поиска минимального пути в ненагруженном ориентированном орграфе на любом языке программирования, алгоритм фронта волны.

    курсовая работа [466,3 K], добавлен 28.04.2011

  • Операции на графах позволяют образовывать новые графы из нескольких более простых. Операции на графах без параллельных ребер. Объединение графов. Свойства операции объединения т, которые следуют из определения операции и свойств операций на множествах.

    реферат [106,0 K], добавлен 27.11.2008

  • Основополагающие понятия теории графов и теории групп. Определение эквивалентности, порождаемой группой подстановок, и доказательство леммы Бернсайда о числе классов такой эквивалентности. Сущность перечня конфигурации, доказательство теоремы Пойа.

    курсовая работа [682,9 K], добавлен 20.05.2013

  • Понятие и внутренняя структура графа, его применение и матричное представление (матрица инциденций, разрезов, цикломатическая, Кирхгофа). Специальные свойства и признаки графов, решение оптимизационных задач. Венгерский алгоритм, матричная интерпретация.

    курсовая работа [664,6 K], добавлен 24.12.2013

  • Основополагающие понятия теории графов. Определение эквивалентности, порождаемое группой подстановок, и доказательство леммы Бернсайда о числе ее классов. Понятие перечня конфигурации и доказательство теоремы Пойа. Решение задачи о перечислении графов.

    курсовая работа [649,2 K], добавлен 18.01.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.