#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
Aller au code source de ce fichier.
Classes | |
| struct | cell |
| structure de cellule pour les listes chaînees de successeurs. Plus de détails... | |
| struct | graphe |
| structure pour la representation des graphes Plus de détails... | |
Macros | |
| #define | M_PI 3.14159265358979323846 |
| #define | max(X, Y) ((X)>=(Y)?(X):(Y)) |
| #define | min(X, Y) ((X)<=(Y)?(X):(Y)) |
Définition de type | |
| typedef cell * | pcell |
| pointeur sur une cellule | |
Fonctions | |
| void | AfficheEnsemble (boolean *s, int n) |
| affiche à l'écran l'ensemble representé par le tableau de booléens s. | |
| void | AfficheListe (pcell p) |
| affiche le contenu de la liste p. | |
| void | AfficheSuccesseurs (graphe *g) |
| affiche le graphe dans sa représentation "listes de successeurs". | |
| void | AfficheArcs (graphe *g) |
| affiche le graphe dans sa représentation "listes d'arcs". | |
| void | AfficheValeursSommets (graphe *g) |
| affiche les valeurs associées aux sommets. | |
| void | PSGraphe (graphe *g, char *filename, double r, double t, double marge) |
| génère une figure PostScript d'après la représentation "successeurs" du graphe g. | |
| void | AutoNomsSommets (graphe *g, int mode) |
| génère automatiquement des noms pour les sommets du graphe g. | |
| void | PlongementCirculaire (graphe *g, double r) |
| affecte à chaque sommet des coordonnées (x,y) régulierement réparties sur un cercle. | |
| void | PlongementRadial (graphe *g, int c) |
| répartit les sommets de g sur des cercles concentriques en fonction de leur rang, avec le sommet c au centre. | |
| pcell | AlloueCell (pcell *plibre) |
| retire la premiere cellule de la liste pointée par plibre et retourne un pointeur sur cette cellule. | |
| void | LibereCell (pcell *plibre, pcell p) |
| insère la cellule p au début de la liste pointée par 'plibre'. | |
| void | RetireTete (pcell *plibre, pcell *pliste) |
| retire la première cellule de la liste 'pliste'. La cellule est chaînee à la liste 'plibre'. | |
| void | AjouteTete (pcell *plibre, pcell *pliste, int a) |
| ajoute une cellule contenant le sommet 'a' en tête de la liste 'pliste'. La cellule est prise dans la liste 'plibre'. | |
| int | EstDansListe (pcell p, int a) |
| retourne 1 si le sommet 'a' se trouve dans la liste 'p', 0 sinon. | |
| graphe * | InitGraphe (int nsom, int nmaxarc) |
| alloue la memoire nécessaire pour représenter un graphe a 'nsom' sommets, possédant au maximum 'nmaxarc' arcs. Retourne un pointeur sur la structure allouée. | |
| void | TermineGraphe (graphe *g) |
| libère la memoire occupée par le graphe g. | |
| graphe * | ReadGraphe (char *filename) |
| Lit les données d'un graphe dans le fichier filename, retourne un pointeur sur la structure graphe construite. | |
| void | AjouteArc (graphe *g, int i, int s) |
| ajoute l'arc (i,s) au graphe g (application gamma seulement). | |
| void | RetireArc (graphe *g, int i, int s) |
| retire l'arc (i,s) du graphe g (application gamma seulement), si celui-ci etait présent. Sinon, pas d'action. | |
| int | PopSuccesseur (graphe *g, int i) |
| retire un arc (i,s) du graphe g (application gamma seulement), et retourne le sommet s | |
| int | EstSuccesseur (graphe *g, int i, int s) |
| retourne 1 si le sommet 's' est un successeur du sommet 'i', 0 sinon. | |
| graphe * | GrapheAleatoire (int nsom, int narc) |
| retourne un graphe aléatoire à 'nsom' sommets et 'narc' arcs. Le graphe est antisymétrique et sans boucle. Le nombre d'arcs doit être <= nsom (nsom - 1) / 2. Les arcs sont pondérés (valeur aléatoire entre 0.0 et 1.0). | |
| graphe * | Symetrique (graphe *g) |
| construit et retourne le graphe g_1 symétrique du graphe g (algorithme linéaire) | |
| graphe * | FermetureSymetrique (graphe *g) |
| construit et retourne la fermeture symétrique du graphe g (algorithme linéaire) | |
| void | CompFortConnexe (graphe *g, graphe *g_1, int a, boolean *Ca) |
| retourne dans Ca la composante fortement connexe de g contenant a (sous la forme d'un tableau de booléens). | |
| boolean | ExisteCircuit (graphe *g, int a) |
| teste l'existence d'un circuit dans g contenant a | |
| void | CompConnexe (graphe *g, graphe *g_1, int a, boolean *Ca) |
| retourne la composante connexe de g contenant a (sous la forme d'un tableau de booléens). | |
| boolean | Connexe (graphe *g, graphe *g_1) |
| retourne 1 si le graphe est connexe, 0 sinon. | |
| void AfficheArcs | ( | graphe * | g | ) |
affiche le graphe dans sa représentation "listes d'arcs".
| g | (entrée) : un graphe. |
Références graphe::narc, graphe::queue, graphe::tete, et graphe::v_arcs.
| void AfficheEnsemble | ( | boolean * | s, | |
| int | n | |||
| ) |
affiche à l'écran l'ensemble representé par le tableau de booléens s.
| s | (entrée) : un tableau de valeurs booléennes. | |
| n | (entrée) : la taille du tableau. |
| void AfficheListe | ( | pcell | p | ) |
affiche le contenu de la liste p.
| p | (entrée) : une liste chaînee de successeurs. |
Références cell::next, et cell::som.
Référencé par AfficheSuccesseurs().
| void AfficheSuccesseurs | ( | graphe * | g | ) |
affiche le graphe dans sa représentation "listes de successeurs".
| g | (entrée) : un graphe. |
Références AfficheListe(), graphe::gamma, et graphe::nsom.
| void AfficheValeursSommets | ( | graphe * | g | ) |
affiche les valeurs associées aux sommets.
| g | (entrée) : un graphe. |
Références graphe::nsom, et graphe::v_sommets.
| void AjouteArc | ( | graphe * | g, | |
| int | i, | |||
| int | s | |||
| ) |
ajoute l'arc (i,s) au graphe g (application gamma seulement).
| g | (entrée/sortie) : un graphe. | |
| i | (entrée) : un sommet de g. | |
| s | (entrée) : un sommet de g. |
Références AjouteTete(), graphe::gamma, graphe::libre, et graphe::narc.
Référencé par FermetureSymetrique(), GrapheAleatoire(), ReadGraphe(), et Symetrique().
ajoute une cellule contenant le sommet 'a' en tête de la liste 'pliste'. La cellule est prise dans la liste 'plibre'.
| plibre | (entrée) : pointeur sur une liste chaînee de cellules libres. | |
| pliste | (entrée) : pointeur sur une liste. | |
| a | (entrée) : un sommet. |
Références AlloueCell(), cell::next, et cell::som.
Référencé par AjouteArc().
retire la premiere cellule de la liste pointée par plibre et retourne un pointeur sur cette cellule.
| plibre | (entrée) : pointeur sur une liste chaînee de cellules libres. |
Références cell::next.
Référencé par AjouteTete().
| void AutoNomsSommets | ( | graphe * | g, | |
| int | mode | |||
| ) |
génère automatiquement des noms pour les sommets du graphe g.
| g | (entrée) : un graphe. | |
| mode | (entrée) : 1 pour que les noms soient les indices des sommets, 2 pour que les noms soient les valeurs associées aux sommets, 3 pour des noms composes de l'indice et de la valeur. |
Références graphe::nomsommet, graphe::nsom, et graphe::v_sommets.
retourne la composante connexe de g contenant a (sous la forme d'un tableau de booléens).
| g | (entrée) : un graphe. | |
| g_1 | (entrée) : le graphe symétrique de g. | |
| a | (entrée) : un sommet du graphe g. |
Références CreeLifoVide(), graphe::gamma, LifoPop(), LifoPush(), LifoTermine(), LifoVide(), cell::next, graphe::nsom, et cell::som.
Référencé par Connexe().
retourne dans Ca la composante fortement connexe de g contenant a (sous la forme d'un tableau de booléens).
| g | (entrée) : un graphe. | |
| g_1 | (entrée) : le graphe symétrique de g. | |
| a | (entrée) : un sommet du graphe g. | |
| Ca | (sortie) : un sous-ensemble des sommets de g (tableau de booléens). |
Références CreeLifoVide(), EnsembleVide(), graphe::gamma, LifoPop(), LifoPush(), LifoTermine(), LifoVide(), cell::next, graphe::nsom, et cell::som.
retourne 1 si le graphe est connexe, 0 sinon.
Références CompConnexe(), EnsembleVide(), et graphe::nsom.
| int EstDansListe | ( | pcell | p, | |
| int | a | |||
| ) |
retourne 1 si le sommet 'a' se trouve dans la liste 'p', 0 sinon.
| p | (entrée) : une liste chaînee de successeurs. | |
| a | (entrée) : un sommet. |
Références cell::next, et cell::som.
Référencé par EstSuccesseur().
| int EstSuccesseur | ( | graphe * | g, | |
| int | i, | |||
| int | s | |||
| ) |
retourne 1 si le sommet 's' est un successeur du sommet 'i', 0 sinon.
| g | (entrée) : un graphe. | |
| i | (entrée) : un sommet de g. | |
| s | (entrée) : un sommet de g. |
Références EstDansListe(), et graphe::gamma.
Référencé par GrapheAleatoire().
| boolean ExisteCircuit | ( | graphe * | g, | |
| int | a | |||
| ) |
teste l'existence d'un circuit dans g contenant a
Références CreeLifoVide(), EnsembleVide(), graphe::gamma, LifoPop(), LifoPush(), LifoTermine(), LifoVide(), cell::next, graphe::nsom, et cell::som.
construit et retourne la fermeture symétrique du graphe g (algorithme linéaire)
| g | (entrée) : un graphe. |
Références AjouteArc(), graphe::gamma, InitGraphe(), graphe::narc, cell::next, graphe::nsom, et cell::som.
| graphe* GrapheAleatoire | ( | int | nsom, | |
| int | narc | |||
| ) |
retourne un graphe aléatoire à 'nsom' sommets et 'narc' arcs. Le graphe est antisymétrique et sans boucle. Le nombre d'arcs doit être <= nsom (nsom - 1) / 2. Les arcs sont pondérés (valeur aléatoire entre 0.0 et 1.0).
| nsom | (entrée) : nombre de sommets. | |
| narc | (entrée) : nombre d'arcs. |
Références AjouteArc(), EstSuccesseur(), InitGraphe(), graphe::queue, RetireArc(), graphe::tete, et graphe::v_arcs.
| graphe* InitGraphe | ( | int | nsom, | |
| int | nmaxarc | |||
| ) |
alloue la memoire nécessaire pour représenter un graphe a 'nsom' sommets, possédant au maximum 'nmaxarc' arcs. Retourne un pointeur sur la structure allouée.
| nsom | (entrée) : nombre de sommets. | |
| nmaxarc | (entrée) : nombre maximum d'arcs. |
Références graphe::gamma, graphe::libre, graphe::narc, graphe::nmaxarc, graphe::nomsommet, graphe::nsom, graphe::queue, graphe::reserve, graphe::tete, graphe::v_arcs, graphe::v_sommets, graphe::x, et graphe::y.
Référencé par FermetureSymetrique(), GrapheAleatoire(), ReadGraphe(), et Symetrique().
insère la cellule p au début de la liste pointée par 'plibre'.
| plibre | (entrée) : pointeur sur une liste chaînee de cellules libres. | |
| p | (entrée) : pointeur sur une cellule. |
Références cell::next.
Référencé par RetireTete().
| void PlongementCirculaire | ( | graphe * | g, | |
| double | r | |||
| ) |
affecte à chaque sommet des coordonnées (x,y) régulierement réparties sur un cercle.
| g | (entrée/sortie) : un graphe. | |
| r | (entrée) : le rayon du cercle. |
Références graphe::nsom, graphe::x, et graphe::y.
| void PlongementRadial | ( | graphe * | g, | |
| int | c | |||
| ) |
répartit les sommets de g sur des cercles concentriques en fonction de leur rang, avec le sommet c au centre.
| g | (entrée/sortie) : un graphe. | |
| c | (entrée) : le sommet à placer au centre. |
Références graphe::gamma, cell::next, graphe::nsom, cell::som, graphe::x, et graphe::y.
| int PopSuccesseur | ( | graphe * | g, | |
| int | i | |||
| ) |
retire un arc (i,s) du graphe g (application gamma seulement), et retourne le sommet s
| g | (entrée/sortie) : un graphe. | |
| i | (entrée) : un sommet de g. |
Références graphe::gamma, graphe::libre, RetireTete(), et cell::som.
| void PSGraphe | ( | graphe * | g, | |
| char * | filename, | |||
| double | r, | |||
| double | t, | |||
| double | marge | |||
| ) |
génère une figure PostScript d'après la représentation "successeurs" du graphe g.
| g | (entrée) : un graphe. | |
| filename | (entrée) : nom du fichier postscript à générer. | |
| r | (entrée) : rayon des cercles qui représentent les sommets (0 pour ne pas les dessiner). | |
| t | (entrée) : taille (demi-longueur) des flèches pour les arcs (0 pour ne pas les dessiner). | |
| marge | (entrée) : marge en x et en y. |
Références graphe::gamma, cell::next, graphe::nomsommet, graphe::nsom, cell::som, graphe::x, et graphe::y.
| graphe* ReadGraphe | ( | char * | filename | ) |
Lit les données d'un graphe dans le fichier filename, retourne un pointeur sur la structure graphe construite.
| filename | (entrée) : nom du fichier graphe. |
Références AjouteArc(), InitGraphe(), et graphe::nomsommet.
| void RetireArc | ( | graphe * | g, | |
| int | i, | |||
| int | s | |||
| ) |
retire l'arc (i,s) du graphe g (application gamma seulement), si celui-ci etait présent. Sinon, pas d'action.
| g | (entrée/sortie) : un graphe. | |
| i | (entrée) : un sommet de g. | |
| s | (entrée) : un sommet de g. |
Références graphe::gamma, graphe::libre, graphe::narc, et RetireTete().
Référencé par GrapheAleatoire().
retire la première cellule de la liste 'pliste'. La cellule est chaînee à la liste 'plibre'.
| plibre | (entrée) : pointeur sur une liste chaînee de cellules libres. | |
| pliste | (entrée) : pointeur sur une liste. |
Références LibereCell(), et cell::next.
Référencé par PopSuccesseur(), et RetireArc().
construit et retourne le graphe g_1 symétrique du graphe g (algorithme linéaire)
| g | (entrée) : un graphe. |
Références AjouteArc(), graphe::gamma, InitGraphe(), graphe::narc, cell::next, graphe::nsom, et cell::som.
| void TermineGraphe | ( | graphe * | g | ) |
libère la memoire occupée par le graphe g.
| g | (entrée) : un graphe. |
Références graphe::gamma, graphe::nomsommet, graphe::nsom, graphe::queue, graphe::reserve, graphe::tete, graphe::v_arcs, et graphe::v_sommets.
1.5.5