#ifndef FLOTS_H_INCLUDED
#define FLOTS_H_INCLUDED
#include <string>
#include <vector>
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;

struct arc{

    string villeDep;
    string villeDest;
    int capacite;
    int capa;
    int flot;
    bool sature;
    bool bloque;
    bool null;
    //....
};

bool lirefichierArc(vector<arc> &lesArcs,string &entree, string &sortie); // lit le fichier contenant les paramètres d'un réseau et rempli le vecteur passé en paramêtre
void afficheArc(arc arc); // affiche un arc
void afficheLesArcs(vector<arc> lesArcs); // affiche un vecteur d'arcs
arc arcNsMaxCapacite(vector<arc> lesArcs); // retourne l'arc non sature ayant la plus grande capacité résiduelle
arc arcNsMinCapacite(vector<arc> lesArcs); // retourne l'arc non sature ayant la plus petite capacité résiduelle
bool estPraticable(vector<arc> lesArcs); // permet de savoir si le réseau est encore praticable pour bloch (pas d'arc bloqué ou saturé
vector<arc> chercheChemin(arc arcCapaciteMin, vector<arc> &lesArcs, string entree, string sortie); // retourne le premier chemin (liste d'arcs) passant par l'arc de capacité minimale passé en paramètre
void augmentationFlot(vector<arc> chemin, vector<arc> &lesArcs, int augmentation,vector< vector<arc> > &histoChemins); // augmente le flot des arcs du chemin passé en pramètre
int bloch(vector<arc> &lesArcs, string entree, string sortie,vector< vector<arc> >&trace,vector< vector<arc> > &histoChemins,vector<int> &lesAugmentationsFlot); // trouve le flot complet
arc arcNsPrecedent(arc unArc, vector<arc> lesArcs);
arc arcNsSuivant(arc unArc, vector<arc> lesArcs);
void chercheBlocage(vector<arc> &lesArcs,string entree, string sortie);
bool contientSommet(vector<arc> lesArcs, string sommet);
void metArcMinNull(vector<arc> &lesArcs,vector<arc> chemin,string sommetCirc);
void metAjourTrace(vector< vector<arc> > &trace,vector<arc> lesArcs);
void afficheTrace(vector< vector<arc> > trace, vector<arc> lesArcs);
void ecrire_fichier(vector< vector<arc> > traceB, vector<arc> lesArcsB, vector< vector<arc> > traceF, vector<arc> lesArcsF,vector< vector<arc> > histoChemins,vector<int> lesAugmentationsFlot,vector<string> Trace_chemin,vector<int> Trace_value,int flotMax);
int flotComplet(vector<int> lesAugmentationsFlot);
int flotMax(vector<arc> lesArcsB,string sortie);
bool connexeMat(vector<arc> lesArcs,string entree, string sortie);
bool existDslist(vector<string> sommets, string sommet);
#endif // FLOTS_H_INCLUDED
