Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Пожалуйста, расшифруйте код - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Параллельное программирование http://www.cyberforum.ru/cpp-beginners/thread1192627.html
Подскажите, пожалуйста, как в PUTTY начать редактировать файл?
C++ Запись данных в переменную из текстового файла Пишу сокет приложение в Windows Form, есть textBox1, в нём должен содержатся IP сервера к которому нужно подключится. Считываю данные с textBox1 следующим образом: String ^host; host =... http://www.cyberforum.ru/cpp-beginners/thread1192626.html
C++ Преобразование идельно сбалансированного дерева в дерево поиска
Здравствуйте, уважаемые специалисты! Вынуждена просить у вас помощи, ибо самой справиться не получается. Имеется задание: 1. Формирование однонаправленного списка; 2. Печать однонаправленного...
C++ Векторный калькулятор на классах
Привет всем. Преподаватель дал задание, написать векторный калькулятор на классах. На массивах в консоли я сделал для 4 операций, но как теперь переписать его на классы, используя перегрузку функций...
C++ будьте добры правильная программа надо( http://www.cyberforum.ru/cpp-beginners/thread1192583.html
4. Определить номера строк матрицы R, хотя бы один элемент которых равен с, и элементы этих строк умножить на d.
C++ C++ try catch throw в разных функциях try и catch находятся в одной функции а throw вызывается из другой. ну MVS выкидывает исключение вместо передачи управления. что делать? проект консольный, не CLI Добавлено через 1 минуту даже... подробнее

Показать сообщение отдельно
Paris1
Сообщений: n/a

Пожалуйста, расшифруйте код - C++

29.05.2014, 16:36. Просмотров 206. Ответов 1
Метки (Все метки)

Есть код программы. Программа вычисляет максимальный поток по алгоритму Форда-Фалкерсона . В программе есть цикл, педагог спрашивает, каким образом программа выходит из этого цикла. И почему addFlow всегда равняется единичке. Заранее спасибо.

#include <memory.h>

#include<conio.h>

#include <stdio.h>

#include <locale.h>

const int MAX_VERTICES = 40;

int NUM_VERTICES;

const int INFINITY = 10000;

int f[MAX_VERTICES][MAX_VERTICES];

int c[MAX_VERTICES][MAX_VERTICES];

int Flow[MAX_VERTICES];

int Link[MAX_VERTICES];

int Queue[MAX_VERTICES];

int QP, QC;

int FindPath(int source, int target)

{

QP = 0; QC = 1; Queue[0] = source;

Link[target] = -1;

int i;

int CurVertex;

memset(Flow, 0, sizeof(int)*NUM_VERTICES);

Flow[source] = INFINITY;

while (Link[target] == -1 && QP < QC)

{

CurVertex = Queue[QP];

for (i = 0; i<NUM_VERTICES; i++)

if ((c[CurVertex][i] - f[CurVertex][i])>0 && Flow[i] == 0)

{

Queue[QC] = i; QC++;

Link[i] = CurVertex;

if (c[CurVertex][i] - f[CurVertex][i] < Flow[CurVertex])

Flow[i] = c[CurVertex][i];

else

Flow[i] = Flow[CurVertex];

}

QP++;

}

if (Link[target] == -1) return 0;

CurVertex = target;

while (CurVertex != source)

{

f[Link[CurVertex]][CurVertex] += Flow[target];

CurVertex = Link[CurVertex];

}

return Flow[target];

}

int MaxFlow(int source, int target)

{

memset(f, 0, sizeof(int)*MAX_VERTICES*MAX_VERTICES);

int MaxFlow = 0;

int AddFlow;

do

{

AddFlow = FindPath(source, target);

MaxFlow += AddFlow;

} while (AddFlow >0);

return MaxFlow;

}

int main()

{

setlocale(LC_ALL, "Ukrainian");

int source, target;

printf("Ввести число вершин \n");

scanf_s("%d", &NUM_VERTICES);

printf("Ввести номера потока и стока \n");

scanf_s("%d %d", &source, &target);

int i, j;

printf("Матрица смежности \n");

for (i = 0; i<NUM_VERTICES; i++)

for (j = 0; j<NUM_VERTICES; j++)

scanf_s("%d", &c[i][j]);

printf("Max потiк ");

printf("%d\n", MaxFlow(source, target));

_getch();

return 0;

}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru