aboutsummaryrefslogtreecommitdiff
path: root/src/Graph.h
blob: a0087ce475a041c18e16d62abe36266d10bb2797 (plain)
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
#ifndef GRAPH_H
#define GRAPH_H

#include "LinkedList.h"

typedef struct Vertex Vertex;
typedef struct Graph Graph;
struct Vertex {
	int id; // a number in [0; numVertices[
	LinkedList *outNeighbours; // A linked list of vertices.
	LinkedList *inNeighbours; // A linked list of vertices
};

struct Graph {
	int numVertices;
	int numEdges;
	Vertex *vertices; // An array of numVertices vertices
};

// Allocates and constructs a new graph with n vertices.
// Returns a pointer to the new graph, or NULL on error.
// Post: the caller owns the graph.
Graph *Graph_new(int n);

// Adds an edge from the i'th to the j'th vertex (0-indexed).
void Graph_addEdge(Graph *g, int i, int j);

// Reads a graph from the given file and returns a newly
// constructed Graph representing it.
// Returns a pointer to the read graph, or NULL on error.
// Post: the caller owns the graph.
Graph *Graph_read(const char *filename);

// Deallocates the given graph and all its associated memory.
void Graph_delete(Graph *g);

// Prints some useful information about the given graph.
void Graph_print(Graph *g);

#endif // GRAPH_H