/****     fichier Graph.h
 ****     implementation des graphes sous forme de listes d'adjacence
 ****     ce fichier contient la declaration de la classe Graph
 */

#include <iostream.h>
#include "Node.h"

class Graph {
 private: 
  Node *first;  // un pointeur vers le premier noeud de la liste des noeuds
  int nbNode;
  static char* prime(const char *);//ajoute un "prime"(') à un etiquette
  void prof(Node *,bool *); // parcours en prof a partir du noeud specifie
  void profComp(Node * ,bool*,int * ,const int& );
  void profPostNum(Node *,bool* ,int * ,int &);
 public:
  Graph();
  Graph(Graph&);
  ~Graph();
  Node *find(const char*);
  Node *getFirst();
  bool AddNode(const char*);
  bool AddArc(const char*, const char*);
  void print();

  void parcours(); //parcours du graphe(appelle prof sur les noeuds non marqués
  void parcoursPostNum(int *); // avec numerotation postNum appelle profPostNum
  void compFC(); // determine et affiche les composantes fortement connexes
  void inverse(Graph &); //determine le graphe "inverse" 
                   //(ou la direction de tous les arcs est changee)
  
};

