#ifndef ARCS_H
#define ARCS_H

#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <cstdlib> // pour atoi

// On utilise les classes comme des structures, exepter pour le constructeur du graph qui fait office de parseur pour le fichier.

class arcs{ // les arcs récupéré par le parseur
    public:
        arcs(int dep, int arr, int dis);
        int _dep;
        int _arr;
        int _dis;

        bool operator== ( const arcs& a2){
            if (_arr != a2._arr) return false;
            if (_dep != a2._dep) return false;
            if (_dis != a2._dis) return false;
            return true;
        }
};

class sommet{
    public:
        sommet(int id, int place, arcs tmparc);
        sommet(int id, int place);

        std::vector < arcs > listeArcs; // les arcs qui decoule du sommet
        int _id; // Numero du sommet
        int _place; // place dans le tableau
        bool _rel; // sert a savoir si le sommet est relié dans l'algorithme.
};

class graph{
        public:
        std::vector < arcs > listeArcs; // les arretes du graphes
        std::vector < sommet > listeSom; // les sommets du graphes

        graph();
        graph(std::string mon_fichier);// Lit le graphes et initialises la structures

        void printgraph();
        void setPrim(graph &g2); // Algorithme qui calcule l'arbre couvrant de poid minimum par Prim

        int getPlace(int s1){ // retourne la place d'un sommet par rapport a son ID
            for (unsigned int i=0; i < listeSom.size(); i++){
                if (s1 == listeSom[i]._id ){ return listeSom[i]._place;}
            }return-1;} // si il a pas été trouver il y a une erreur dans le graphes

};

#endif // ARCS_H
