Момогите пожалуйста
Решить задачу об источниках и потребителях, сведя ее к задаче построения максимального потока в транспортной сети и используя первый алгоритм построения максимального потока.
У меня есть программам, но она не запускается. В чем дело?
Код:
#include <stdio.h>
#define MAX 110
#define inf 1e9
int x;
int y;
int m;
int tmp;
int n;
int xi;
int yi;
int cap;
int c[MAX][MAX];
int flow[MAX][MAX];
int add_g[MAX][MAX];
int chain[MAX];
int chain_it;
bool used[MAX];
template<typename T>
inline T min(T a,T b) {return (a<b)?a:b;}
bool dfs(int x)
{
used[x] = 1;
chain[chain_it++] = x;
if(x == n)
return true;
for(int i = 0;i <= n;i++)
if(add_g[x][i] != inf && !used[i])
{
bool res = dfs(i);
if(res) return true;
}
chain_it--;
return false;
}
int main()
{
freopen("input.txt","r",stdin);
freopen("output.txt","w",stdout);
scanf("%d %d %d",&x,&y,&m);
for(int i = 0;i < m;i++)
{
scanf("%d %d %d",&xi,&yi,&cap);
c[xi][yi+x] = cap;
}
for(int i = 0;i < x;i++)
{
scanf("%d",&tmp);
c[0][i+1] = tmp;
}
for(int i = 0;i < y;i++)
{
scanf("%d",&tmp);
c[x+i+1][x+y+1] = tmp;
}
n = x+y+1;
printf("Транспортная сеть:\n");
for(int i = 0;i <= n;i++,printf("\n"))
for(int j = 0;j <= n;j++)
printf("%d ",c[i][j]);
while(true)
{
for(int i = 0;i <= n;i++)
used[i] = 0;
chain_it = 0;
for(int i = 0;i <= n;i++)
for(int j = 0;j <= n;j++)
add_g[i][j] = inf;
for(int i = 0;i <= n;i++)
for(int j = i+1;j <= n;j++)
{
add_g[i][j] = (flow[i][j]< c[i][j])?0:inf;
add_g[j][i] = (flow[i][j] > 0)?0:inf;
}
if(!dfs(0))
break;
int for_add = inf;
for(int i = 0;i < chain_it-1;i++)
for_add = min(for_add,c[chain[i]][chain[i+1]]-flow[chain[i]][chain[i+1]]);
for(int i = 0;i < chain_it-1;i++)
flow[chain[i]][chain[i+1]] += for_add;
}
printf("Поток:\n");
for(int i = 0;i <= n;i++,printf("\n"))
for(int j = 0;j <= n;j++)
printf("%d ",flow[i][j]);
printf("Произведено:");
for(int i = 1;i <= x;i++)
printf("%d ",flow[0][i]);
printf("\nПотреблено:");
for(int i = x+1;i <= x+y;i++)
printf("%d ",flow[i][n]);
return 0;
}