123456789101112131415161718192021222324252627282930313233343536373839404142 |
- #ifndef ISL_TARJAN_H
- #define ISL_TARJAN_H
- /* Structure for representing the nodes in the graph being traversed
- * using Tarjan's algorithm.
- * index represents the order in which nodes are visited.
- * min_index is the index of the root of a (sub)component.
- * on_stack indicates whether the node is currently on the stack.
- */
- struct isl_tarjan_node {
- int index;
- int min_index;
- int on_stack;
- };
- /* Structure for representing the graph being traversed
- * using Tarjan's algorithm.
- * len is the number of nodes
- * node is an array of nodes
- * stack contains the nodes on the path from the root to the current node
- * sp is the stack pointer
- * index is the index of the last node visited
- * order contains the elements of the components separated by -1
- * op represents the current position in order
- */
- struct isl_tarjan_graph {
- int len;
- struct isl_tarjan_node *node;
- int *stack;
- int sp;
- int index;
- int *order;
- int op;
- };
- struct isl_tarjan_graph *isl_tarjan_graph_init(isl_ctx *ctx, int len,
- isl_bool (*follows)(int i, int j, void *user), void *user);
- struct isl_tarjan_graph *isl_tarjan_graph_component(isl_ctx *ctx, int len,
- int node, isl_bool (*follows)(int i, int j, void *user), void *user);
- struct isl_tarjan_graph *isl_tarjan_graph_free(struct isl_tarjan_graph *g);
- #endif
|