Esempio n. 1
0
        private StatusSimplex AlgoritmoPrimeiraEtapa()
        {
            bool tlNegativoEncontrado   = false;
            bool elemNegativoEncontrado = false;
            int  linhaTLNegativo        = 0;

            //zerar linha e coluna permissiveis
            _colunaPerm = -1;
            _linhaPerm  = -1;

            //procurar por um elemento negativo na coluna dos termos livres,
            //escolhendo o primeiro elemento negativo encontrado
            for (int i = 0; i < _quadro.TotalLinhas(); i++)
            {
                if (_quadro.Matriz[i, 0].ValorSuperior < 0)
                {
                    linhaTLNegativo      = i;
                    tlNegativoEncontrado = true;
                    break; //sair do for
                }
            }

            //Se o elemento negativo nao existe, ir para segunda etapa do
            //algoritmo
            if (!tlNegativoEncontrado)
            {
                return(StatusSimplex.SegundaEtapa);
            }

            //procurar por elemento negativo na linha do termo livre negativo,
            //escolhendo o primeiro elemento negativo encontrado
            for (int j = 1; j < _quadro.TotalColunas(); j++)
            {
                if (_quadro.Matriz[linhaTLNegativo, j].ValorSuperior < 0)
                {
                    //marcar coluna permissivel
                    _colunaPerm            = j;
                    elemNegativoEncontrado = true;
                    break; //sair do for
                }
            }

            //se nao existir elemento negativo na mesma linha do termo livre
            //negativo, entao nao existe solucao permissivel
            if (!elemNegativoEncontrado)
            {
                return(StatusSimplex.SolucaoImpossivel);
            }

            //calcular linha permissivel
            this.CalcularLinhaPermissivel();

            return(StatusSimplex.AlgoritmoTroca);
        }