public override List <ISolucao> GerarVizinhanca()
        {
            List <ISolucao> vizinhos = new List <ISolucao>();

            Random random = new Random();

            for (int c = 0; c < Solucao.Componentes.Count; c++)
            {
                Mochila temp = ((Mochila)Solucao).Clone();

                Item item = (Item)temp.Componentes[c];

                temp.RemoveComponente(item);

                int espaco = temp.CapacidadeMaxima - temp.CapacidadeAtual;

                while (espaco > 0)
                {
                    List <Item> comps = ItensDisponiveis.Where(x => x.Peso <= espaco &&
                                                               !temp.Componentes.Contains(x) && x != item).ToList();

                    Item selected = comps.Where(x => (int)x.Utilidade == comps.Max(z => (int)z.Utilidade))
                                    .FirstOrDefault();

                    temp.AddComponente(selected);

                    espaco = temp.CapacidadeMaxima - temp.CapacidadeAtual;
                }

                vizinhos.Add(temp);
            }

            return(vizinhos);
        }
        public override bool VerificaSolucaoCompleta()
        {
            int espaco = Mochila.CapacidadeMaxima - Mochila.CapacidadeAtual;

            if (espaco > 0)
            {
                return(ItensDisponiveis.Where(x => x.Peso <= espaco && !Mochila.Componentes.Contains(x)).ToList().Count == 0);
            }
            else
            {
                return(true);
            }
        }
 public void AddItem(Item item)
 {
     ItensDisponiveis.Add(item);
 }