summaryrefslogtreecommitdiff
path: root/graph.h
blob: e85ef9029a2ac257f4e54d301c192534dcc3eee8 (plain) (blame)
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
41
42
43
44
45
46
/*
	Projet d'algorithmique et programmation 2013-2014
	(cours de C.Matthieu et J.Stern)
	Alex AUVOLAT, Mendes OULAMARA

	Fonctions pour la manipulation de graphes.
	Remarque : un graphe utilise les ensembles de set_*.c, donc si on utilise
	l'implémentation sous forme de bitset cela donne l'équivalent d'une matrice
	d'adjacence, alors que l'utilisation de l'implémentation sous forme de liste
	liée est plus adaptée pour un graphe peu rempli.

	Dans l'ensemble du projet on travaille sur des graphes  non orientées,
	c'est-à-dire que la matrice d'adjacence est symmétrique.

	La structure donnée ici permet très facilement d'accéder à l'ensemble
	des voisins d'un sommet, mais il est un peu plus compliqué d'énumérer
	toutes les arêtes du graphe.

	Il est recommandé d'utiliser la fonction graph_neighbours(int s) pour
	accéder aux voisins d'un noeud, car celle-ci renvoie un const set et
	non un simple set, ce qui évite d'accidentelles modifications des
	données du graphe.
*/

#ifndef DEF_GRAPH_H
#define DEF_GRAPH_H

#include <stdio.h>

#include "sets.h"

struct graph_descriptor {
	int N;					// nombre de noeuds
	set *neighbour;			// ensemble des voisins de chaque noeuds
};

typedef struct graph_descriptor *graph;


graph load_graph(FILE *stream);				// spécification du format dans le fichier README
graph load_graph_dimacs(FILE *stream);		// cf README
const set graph_neighbours(const graph g, int n);
void dump_graphviz(const graph g, FILE *stream);
void delete_graph(graph g);

#endif