48 lines
965 B
C
48 lines
965 B
C
#ifndef GRAPH_H
|
|
#define GRAPH_H
|
|
|
|
#include "arraylist.h"
|
|
#include <stdlib.h>
|
|
|
|
typedef struct Graph Graph;
|
|
typedef struct Vertex Vertex;
|
|
typedef struct Edge Edge;
|
|
|
|
typedef enum {
|
|
GRAPH_OK,
|
|
GRAPH_BAD_ALLOC,
|
|
GRAPH_VERTEX_NOT_FOUND,
|
|
GRAPH_NULL_ARG,
|
|
GRAPH_EMPTY,
|
|
} GraphErr ;
|
|
|
|
typedef enum {
|
|
GRAPH_DIRECTED,
|
|
GRAPH_UNDIRECTED,
|
|
} GraphType;
|
|
|
|
typedef struct {
|
|
ArrayList *distances;
|
|
ArrayList *prev;
|
|
} DijkstraResult;
|
|
|
|
Graph *graph_create(GraphType type);
|
|
GraphErr graph_destroy(Graph **graph);
|
|
|
|
GraphErr graph_add_vertex(Graph *graph);
|
|
|
|
GraphErr graph_connect_vertex(
|
|
Graph *graph,
|
|
size_t node1,
|
|
size_t node2,
|
|
size_t weight);
|
|
|
|
GraphErr graph_vertex_count(Graph *graph, size_t *out);
|
|
GraphErr graph_get_vertex(Graph *graph, size_t index, Vertex *out);
|
|
GraphErr graph_dijkstra(Graph *graph, size_t source, DijkstraResult *result);
|
|
|
|
void graph_print(Graph *graph);
|
|
void dijkstra_print_result(DijkstraResult *result);
|
|
|
|
#endif
|