
#ifndef _GRAPH_H
#define _GRAPH_H

#define MAX_EDGE 1000
struct _VERTEX;
struct _EDGE;

struct _VERTEX {
	int id;
	struct _EDGE *start_edge[MAX_EDGE];
	struct _EDGE *end_edge[MAX_EDGE];
	int n_start_edge;
	int n_end_edge;
	int color;
};

struct _EDGE {
	int id;
	int direct;			// 0 : undirect , 1 : direct
	struct _VERTEX *start_vertex;
	struct _VERTEX *end_vertex;
};

typedef struct _VERTEX VERTEX;
typedef struct _EDGE EDGE;


VERTEX* vertex_create(int id);
void vertex_add_start_edge(VERTEX* vertex, EDGE* start_edge);
void vertex_add_end_edge(VERTEX* vertex, EDGE* end_edge);
void vertex_set_color(VERTEX* vertex, int color);
void vertex_free(VERTEX*);

EDGE* edge_create(int id);
void edge_add_start_vertex(EDGE* edge, VERTEX* start_vertex);
void edge_add_start_vertex(EDGE* edge, VERTEX* start_vertex);
void edge_add_end_vertex(EDGE* edge, VERTEX* end_vertex);
void edge_set_direct(EDGE* edge, int direct);
void edge_free(EDGE*);

#endif
