#ifndef STATE_H
#define STATE_H

#include <iostream>
#include <vector>

class State
{
    public:
        State();
        virtual ~State();
        std::vector<std::vector<int> > cases;

        void affichage();
        bool isFinal() const;
        State move(int);
        bool equalsTo(State);
        std::vector<int> findCell(int) const;
        std::vector<std::vector<int> > getFinalTaquin() const;

        inline bool operator <(const State& s) const {
            return (cases != s.cases);
        }

        int heuristique_p() const;
        int heuristique_man() const;
        int heuristique() const;
        inline bool operator ==(const State& s) const {
            return (cases == s.cases);
        }

        int iter = 0;
        int cost = 0;
};

#endif // STATE_H
