//
// Simplex.hpp
// Simplex
//
// Created by Lettiery on 02/05/16.
// Copyright © 2016 Lettiery. All rights reserved.
//
#ifndef SIMPLEX_H_
#define SIMPLEX_H_
#include <stdio.h>
#include <vector>
using namespace std;
//end of file simplex.cpp
class Simplex{
public:
int model, n_variaveis, n_restricoes;
vector<vector<double> > tablo;
vector<int> base;
void primal();
int paradaPrimal();// retorna -1 de o criterio de parada for verdadeiro, caso contrario retorna o indice do maior elemento encontrado
bool ilimitadoPrimal(int entrar);
int saidaDaBasePrimal(int entrar);//retorn -1 se todos os elementos da coluna "entrar" forem <= 0, caso contraio retorna o indice do elemento que deve sair(linha).Para saber a variavel que saira, deve consultar (base[sair-1]) e o pivot (tablo[sair][entrar])
void pivoteamento(int sair, int entrar);
void dual();
int paradaDual();// retorna -1 de o criterio de parada for verdadeiro, caso contrario retorna o indice da linha que deve sair
int entradaNaBaseDual(int sair);//retorn -1 se todos os elementos da linha "sair" forem >= 0, caso contraio retorna o indice do elemento que deve entrar(coluna).Para saber a variavel que saira, deve consultar (base[sair-1]) e o pivot (tablo[sair][entrar])
void inserirVariaveisDeFolga();
void imprimirTablo();
Simplex(int model ,int n_variaveis, int n_restricoes, vector< vector<double> > tablo);
virtual ~Simplex();
};
#endif /* Simplex_hpp */