void handle_AOV(){
int num = top, pos = 0, i, stack = -1, index, finish;
int path[MAXLEN], ee[MAXLEN], le[MAXLEN], e[MAXLEN], l[MAXLEN], path2[MAXLEN];
ledge cur;
for( i=0; i<=top; i++ ){
if ( set[i]->flag == 0 ){
set[i]->flag = stack;
printf(" %d", i);
stack = i;
path[pos++] = i;
}
ee[i] = 0;
}
printf("/n%d/n", stack);
while ( num >= 0 ){
if ( stack == -1 ){
printf("it is not AOV network");
}
else{
index = stack;
cur = set[stack]->next;
stack = set[stack]->flag;
set[index]->flag = 0;
while ( cur != NULL ){
finish = cur->target;
set[finish]->flag--;
if ( set[finish]->flag == 0 ){
set[finish]->flag = stack;
stack = finish;
path[pos++] = stack;
}
ee[finish] = ee[finish] > ee[index]+cur->weight ? ee[finish] : ee[index]+cur->weight;
cur = cur->next;
}
}
num--;
}
le[path[top]] = ee[path[top]];
for(i=top-1; i>=0; i--){
le[path[i]] = -1;
printf("%d", path[i]);
}
printf("/n");
for (i=top-1; i>=0; i--){
finish = path[i];
cur = set[finish]->next;
while(cur!=NULL){
if (le[finish] == -1 || (le[finish] > le[cur->target] - cur->weight ) )
le[finish] = le[cur->target] - cur->weight;
cur = cur->next;
}
}
pos = 0;
for (i=0; i<=top; i++){
cur = set[path[i]]->next;
while( cur!=NULL ){
l[cur->flag] = le[cur->target] - cur->weight;
e[cur->flag] = ee[path[i]];
if ( l[cur->flag] == e[cur->flag] ){
printf("%d -> %d :%d/n", path[i], cur->target, cur->weight);
}
cur = cur->next;
}
}
}