void MinCost int int int int int int rez int a1 int malloc sizeof int

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
void MinCost(int M, int N, int *a, int *b, int** C, int **rez)
{
int *a1 = (int*)malloc(M*sizeof(int));
for (int i = 1; i <= M; i++)
a1[i] = a[i];
int *b1 = (int*)malloc(N*sizeof(int));
for (int i = 1; i <= N; i++)
b1[i] = b[i];
int minI, minJ;
bool flag = true;
bool *I = (bool*)calloc(M, sizeof(bool));
bool *J = (bool*)calloc(N, sizeof(bool));
while (flag)
{
flag = false;
for (int i = 1; i <= M; i++)
if (!I[i])
{
minI = i;
break;
}
for (int i = 1; i <= N; i++)
if (!J[i])
{
minJ = i;
break;
}
for (int i = 1; i <= M; i++)
{
for (int j = 1; j <= N; j++)
{
if (C[minI][minJ] >= C[i][j] && !I[i] && !J[j])
{
minI = i;
minJ = j;
flag = true;
}
}
}
if (!flag && !C[minI][minJ] && !I[minI] && !J[minJ])
flag = true;
if (flag)
{
if (a1[minI] > b1[minJ])
{
rez[minI][minJ] = b1[minJ];
a1[minI] -= b1[minJ];
J[minJ] = true;
}
else
{
rez[minI][minJ] = a1[minI];
b1[minJ] -= a1[minI];
I[minI] = true;
}
}
}
}