Files
agent_compositor_test/references/SkienaBook/graph.h
T
Abdelrahman Said a11edf0c53 Add graph references
2026-06-28 13:49:01 +01:00

72 lines
2.1 KiB
C

// vim:fileencoding=utf-8:foldmethod=marker
#ifndef GRAPH_H
#define GRAPH_H
/* graph.h
Header file for pointer-based graph data type
*/
/* Copyright 2003-2020 by Steven S. Skiena; all rights reserved.
Permission is granted for use in non-commerical applications
provided this copyright notice remains intact and unchanged.
These programs appear in my books:
"The Algorithm Design Manual" by Steven Skiena, second edition, Springer,
London 2008. See out website www.algorist.com for additional information
or https://www.amazon.com/exec/obidos/ASIN/1848000693/thealgorith01-20
"Programming Challenges: The Programming Contest Training Manual"
by Steven Skiena and Miguel Revilla, Springer-Verlag, New York 2003.
See our website www.programming-challenges.com for additional information,
or https://www.amazon.com/exec/obidos/ASIN/0387001638/thealgorithmrepo/
*/
#include <stdbool.h>
/* #define _NULL 0 null pointer */
/* DFS edge types */
#define TREE 0 /* tree edge */
#define BACK 1 /* back edge */
#define CROSS 2 /* cross edge */
#define FORWARD 3 /* forward edge */
/* [[[ graph_struct_cut */
/* [[[ maxv_cut */
#define MAXV 100 /* maximum number of vertices */
/* ]]] */
/* [[[ edge_struct_only_cut */
typedef struct edgenode {
int y; /* adjacency info */
int weight; /* edge weight, if any */
struct edgenode *next; /* next edge in list */
} edgenode;
/* ]]] */
/* [[[ graph_struct_only_cut */
typedef struct {
edgenode *edges[MAXV+1]; /* adjacency info */
int degree[MAXV+1]; /* outdegree of each vertex */
int nvertices; /* number of vertices in the graph */
int nedges; /* number of edges in the graph */
int directed; /* is the graph directed? */
} graph;
/* ]]] */
/* ]]] */
void process_vertex_early(int v);
void process_vertex_late(int v);
void process_edge(int x, int y);
void initialize_graph(graph *g, bool directed);
void read_graph(graph *g, bool directed);
void print_graph(graph *g);
graph *transpose(graph *g);
#endif // !GRAPH_H