public Solucao One_flip_best(Solucao inicio, int x){
        this.solucoes.put(inicio.getCustototal(), inicio);
        for(Coluna col : inicio.getColunas()){
            for(Integer colx : inicio.getLinhasX().keySet()){           
                if(col.getNome()!=inicio.getLinhasX().get(colx).getNome()){
                    if(inicio.getLinhasX().get(colx).getCusto()<col.getCusto()){
                        Solucao testarsolucao = new Solucao(inicio);
                        removerLinhas(col, testarsolucao);
                        cobrirLinhas(col, testarsolucao);
                        ArrayList colunas = testarsolucao.getColunas();
                        colunas.remove(col);
                        testarsolucao.setColunas(colunas);
                        if(cobreTodas(inicio.getLinhasX().get(colx), testarsolucao)){
                            ArrayList novascolunas = testarsolucao.getColunas();
                            novascolunas.add(inicio.getLinhasX().get(colx));
                            testarsolucao.setColunas(novascolunas);
                            Solucao verdadeira = this.eliminarRedundancia(testarsolucao);
                            String newstring = MOAVNS.transformaSolucao(verdadeira);
                            if(!MOAVNS.solucoes.contains(newstring)){
                                verdadeira.setCustototal(verdadeira.getCustototal()-col.getCusto()+inicio.getLinhasX().get(colx).getCusto());
                                this.solucoes.put(verdadeira.getCustototal(), verdadeira);
                            }
                        }
                    }
                }
                
            }
        }
        return this.solucoes.get(this.solucoes.keySet().iterator().next()).iterator().next();
    }