#include "abbas_roth_header.h"

void a_etoile(t_environnement * env, int S)
{
    ///initialisation des variabes
    bool ouverts[100];
    bool fermes[100];

    for (int i=0; i<100; i++)
    {
        ouverts[i]=false;
        fermes[i]=false;
    }

    bool succes=false;
    etat etats[100];

    { //initialisation des états
        for ( int etatCourant = 1 ; etatCourant <= env->nb_etats ; etatCourant ++ ) {
         etats[etatCourant].g=0;
         etats[etatCourant].h=h (env , 1 , etatCourant ) ;
         etats[etatCourant].peres[0]=-1;
        }
    }

    ouverts[S]=true;


    while (!est_vide(ouverts) && !succes)
    {
        int E= choixdansouverts(etats,ouverts,env->nb_etats);
        if (estSolution(env, E))
        {
            system("pause");
            succes=true;
        }else{
            ouverts[E]=false;
            fermes[E]=true;
            S=premierSuccesseur (env ,E) ;

            while (S!=-1)
            {
                if (!ouverts[S] && !fermes[S])
                {
                    ouverts[S]=true;
                    etats[S].g=etats[E].g+cout_transition(env,1,E,S);

                    { /// ajout de l'état à la suite des pères
                        int t=1;
                        while (etats[S].peres[t]!=-1) //on se met à la fon des pères
                        {
                            t++;
                        }
                        etats[S].peres[t]=E;
                        etats[S].peres[t+1]=-1; //indicateur de fin de tableau
                    }
                }else if (fermes[S])
                {
                    fermes[S]=false;
                    ouverts[S]=true;
                }
                S=successeurSuivant (env , E ) ;
            }
        }

    }

    ///affichage
    cout<<endl<<"Ferme : ";
    for (int i=1;i<100;i++)
    {
        if (fermes[i])
        { cout<<i<<" ";}
    }

    cout<<endl<<"Ouvert : ";
    for (int i=1;i<100;i++)
    {
        if (ouverts[i])
        { cout<<i<<" ";}
    }

}






bool est_vide (bool tab[])
{
    int i =1;
    while (i<100 && tab[i]==false)
    {
        cout<<"coucou"<<tab[i]<<endl;
        i++;
    }
    return !tab[i];
}

int choixdansouverts(etat etats[], bool ouv[],int fin)
{
    ///min de f
    int max=etats[1].h+etats[1].g;
    int id_max=1;
    for (int i=2;i<fin;i++)
    {
        if (max<etats[i].h+etats[i].g)
        {
            max=etats[i].h+etats[i].g;
            id_max=i;
        }
    }
    return id_max;
}
