Exemplo n.º 1
0
        public Solucao SolucaoAleatoria()
        {
            var rotas = new List <Rota>();

            foreach (var viajante in Viajantes)
            {
                var rota = new Rota {
                    Viajante = viajante
                };
                rotas.Add(rota);

                while (rota.Locais.Count < viajante.QuantidadeLocais)
                {
                    Local local;
                    do
                    {
                        local = Mapa.LocailAleatorio();
                    } while (rotas.Any(r => r.Locais.Contains(local)));

                    rota.Locais.Add(local);
                }
            }
            return(new Solucao {
                Rotas = rotas
            });
        }
Exemplo n.º 2
0
        public Solucao Solucao(IList <int> indexes)
        {
            var   rotas       = new List <Rota>();
            var   locaisCount = 0;
            float custo       = 0;

            foreach (var viajante in Viajantes)
            {
                var rota = new Rota
                {
                    Viajante = viajante,
                    Locais   = indexes.Skip(locaisCount).Take(viajante.QuantidadeLocais).Select(index => Mapa.Locais[index]).ToList()
                };

                if (rotas.Any())
                {
                    rota.Locais.Insert(0, rotas.Last().Locais.Last());
                }

                for (int i = 0; i < rota.Locais.Count - 1; i++)
                {
                    var atual   = rota.Locais[i];
                    var proximo = rota.Locais[i + 1];

                    custo += Vector2.Distance(atual.Posicao, proximo.Posicao);
                }

                locaisCount += viajante.QuantidadeLocais;
                rotas.Add(rota);
            }

            return(new Solucao
            {
                Custo = custo,
                Rotas = rotas
            });
        }