www.pudn.com > geosteiner-3.1.zip > flow.h
/***********************************************************************
File: flow.h
Rev: a-1
Date: 07/05/96
Copyright (c) 1996, 2001 by David M. Warme
************************************************************************
Data structures and declarations for the maximum
flow network solver.
************************************************************************
Modification Log:
a-1: 07/05/96 warme
: Created.
************************************************************************/
#ifndef FLOW_H
#define FLOW_H
#include "steiner.h"
/*
* The value used to represent "infinite" flow.
*/
#define INFINITE_FLOW 10000.0
/*
* The following structure contains all of the information needed
* to describe a single network flow problem instance.
*/
struct flow_prob {
int num_nodes; /* Number of nodes */
int num_arcs; /* Number of arcs */
int source; /* Source node number */
int sink; /* Sink node number */
int ** out; /* outgoing arcs for each node */
int ** in; /* incoming arcs for each node */
int * arc_src; /* source node for each arc */
int * arc_dst; /* destination node for each arc */
double * capacity; /* capacity for each arc */
};
/*
* The next structure contains all of the information that describes
* a network max-flow solution.
*/
struct flow_soln {
double z; /* total network src->sink flow */
double * flow; /* flow for each arc */
bitmap_t * cut; /* nodes on source side of cut */
};
/*
* Finally, this structure contains temporary data structures used
* internally by the network flow solver. Its contents are unimportant
* to the outside world.
*/
struct flow_temp {
/* Pre-allocated temporary buffers used during a */
/* single run of the flow solver -- may be reused for */
/* several consecutive runs... */
int * pred_arc; /* predecessor arc in path */
double * delta; /* flow increment available at node */
int * queue; /* breadth-first queue of nodes */
};
extern void compute_max_flow (struct flow_prob *,
struct flow_temp *,
struct flow_soln *);
extern void create_flow_solution_data (struct flow_prob *,
struct flow_soln *);
extern void create_flow_temp_data (struct flow_prob *,
struct flow_temp *);
extern void free_flow_solution_data (struct flow_soln *);
extern void free_flow_temp_data (struct flow_temp *);
#endif