#include #include
#include
#include
using namespace std;
const int ver_max = 45;
int ver_num;
const int IMMENSITY = 10000;
int f[ver_max][ver_max];
int c[ver_max][ver_max];
int flux[ver_max];
int route[ver_max];
int turn[ver_max];
int tp, tc;
//Функция для нахождения пути
int GetWay(int origin, int dry)
{
tp = 0; tc = 1; turn[0] = origin;
route[dry] = -1;
int i;
int NodeCut;
memset(flux, 0, sizeof(int)*ver_num);
flux[origin] = IMMENSITY;
while (route[dry] == -1 && tp < tc)
{
NodeCut = turn[tp];
for (i = 0; i < ver_num; i++)
if ((c[NodeCut][i] - f[NodeCut][i]) > 0 && flux[i] == 0)
{
turn[tc] = i; tc++;
route[i] = NodeCut;
if (c[NodeCut][i] - f[NodeCut][i] < flux[NodeCut])
{
flux[i] = c[NodeCut][i];
}
else
{
flux[i] = flux[NodeCut];
}
}
tp++;
}
if (route[dry] == -1) return 0;
NodeCut = dry;
while (NodeCut != origin)
{
f[route[NodeCut]][NodeCut] += flux[dry];
NodeCut = route[NodeCut];
}
return flux[dry];
}
//Функция для нахождения максимального потока
int FluxMax(int origin, int dry)
{
memset(f, 0, sizeof(int)*ver_max*ver_max);
int FluxMax = 0;
int FluxAdd;
do
{
FluxAdd = GetWay(origin, dry);
FluxMax += FluxAdd;
}
while (FluxAdd > 0);
return FluxMax;
}
//Основной код программы
int main()
{
int origin, dry;
system("title Поиск максимального пути методом Форда — Фалкерсона");
setlocale(LC_ALL, "Russian");
printf("Введите количество вершин:");
scanf_s("%d", &ver_num);
printf("Введите исток А и сток В (счет начинается с 0!):");
scanf_s("%d %d", &origin, &dry);
int i, j;
printf("Введите смежную матрицу графа: \n");
for (i = 0; i < ver_num; i++)
for (j = 0; j < ver_num; j++)
scanf_s("%d", &c[i][j]);
printf("Максимальный поток сети от истока %d до стока %d: %d", origin, dry, FluxMax(origin, dry));
_getch();
return 0;
}
, только нужно С#) а не С++

111122223 111122223    2   01.04.2021 16:58    0

Другие вопросы по теме Информатика