/
fordFulkerson.c
103 lines (99 loc) · 1.37 KB
/
fordFulkerson.c
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
#include<stdio.h>
int E[6][6]={{0, 16, 13, 0, 0, 0},
{0, 0, 10, 12, 0, 0},
{0, 4, 0, 0, 14, 0},
{0, 0, 9, 0, 0, 20},
{0, 0, 0, 7, 0, 4},
{0, 0, 0, 0, 0, 0}};
struct rGraph
{
int f;
int b;
}R[100][100];
struct queue
{
int top;
int elements[100];
}q;
void enque(int x)
{
q.top++;
q.elements[q.top]=x;
}
int deque()
{
int x=q.elements[0];
int i;
for(i=0;i<q.top-1;i++)
{
q.elements[i]=q.elements[i+1];
}
q.top--;
return x;
}
int parent[100];
int considered(int *C,int i,int n)
{
int j;
for(j=0;j<n;j++)
{
if(C[j]==i)
{
return 1;
}
}
return 0;
}
int bfs(int s,int n,int t)
{
int i,j;
int C[100];
enque(s);
C[0]=s;int c=1;
while(q.top!=-1)//||s!=t)
{
//printf("%d\n",q.elements[q.top]);
s=deque();
printf("%d\n",s);
//printf("%d\n",s);
for(i=0;i<n;i++)
{
if(E[s][i]!=0 && considered(C,i,c)==0)
{
//printf("k\n");
enque(i);
parent[i]=s;
C[c++]=i;
}
}
}
if(q.top==-1)
{
return 0;
}
if(s==t)
{
return 1;
}
}
int min(int a,int b)
{
if(a>b)
return b;
else
return a;
}
int fordFulkersion(int s,int n,int t)
{
int i;
for(i=0;i<n;i++)
{
}
}
int main()
{
q.top=-1;
printf ( "The maximum possible flow is %d ", bfs( 0,6, 5));
// printf ( "The maximum possible flow is %d ", fordFulkersion( 0,6, 5));
return 0;
}