#ifndef GRAPH_H_
#define GRAPH_H_

#define N 64
#define boolearn int
#define true 1
#define false 0

typedef boolearn adjmatrix[N][N];
typedef int vindex;
typedef struct edgecell{
	vindex destination;
	struct edgecell *next;
} edgecell;
typedef edgecell *edgelist;
typedef struct{
	edgecell *adjlist;
}vertextype;
typedef vertextype vertices[N];
typedef struct {
	int vertex_num;
	int edge_num;
	vertices vtop;
} graph;

int read_adjacency_matrix(char *datafile, adjmatrix mat);
void add_edge( graph *g, vindex src, vindex dest );
void translate_into_graph( adjmatrix mat, graph *g );
void print_graph( graph *g );
void free_graph( graph *g );
boolearn judge_way(graph *g, vindex start, vindex target);

boolearn judge_sc_graph(graph *g);
boolearn judge_se_graph(graph *g);


#endif