コード例 #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
            });
        }
コード例 #2
0
        public static Mapa Random(int quantidadeLocais = 30)
        {
            var mapa = new Mapa();
            int
                xMin = (int)(mapa.Tamanho.Width * 0.05f),
                xMax = (int)(mapa.Tamanho.Width * 0.85f),
                yMin = (int)(mapa.Tamanho.Height * 0.05f),
                yMax = (int)(mapa.Tamanho.Height * 0.95f);

            var locais = Enumerable
                         .Range(0, quantidadeLocais)
                         .Select(n => new Local('A' + n <= 'Z' ? ((char)('A' + n)).ToString() : n.ToString(), new Vector2(Rand.Next(xMin, xMax), Rand.Next(yMin, yMax))))
                         .ToList();

            mapa.Locais = locais;

            return(mapa);
        }
コード例 #3
0
        public Problema(Mapa mapa, int[] tamanhoRotas, double pesoProximidade)
        {
            var nomes      = new[] { "Fransquinha", "Sebastiao", "Raquel", "Priscila", "Naruto", "Alucard", "Vegeta", "Goku", "Solid Snake", "John Connor", "Nanomachines", "Bolsonaro", "Lula", "Fora" };
            var sobreNomes = new[] { "Joao", "Silva", "Freire", "Uzumaki", "Son", "Uchiha", "Nanomachines", "Pereira", "Mito", "Preso", "Temer", "Bolsonaro" };

            var cores = new Queue <Color>(new[] { Color.Red, Color.Blue, Color.Green, Color.Yellow, Color.Purple, Color.Brown, Color.Orange, Color.Gray });

            Mapa = mapa;

            Viajantes = tamanhoRotas.Select(t => new Viajante
            {
                QuantidadeLocais = t,
                Cor  = cores.Dequeue(),
                Nome = $"{nomes.Random()} {sobreNomes.Random()}"
            })
                        .ToArray();

            this.pesoProximidade = pesoProximidade;
        }
コード例 #4
0
        public static Mapa Elipse(int quantidadeLocais = 30)
        {
            var mapa    = new Mapa();
            var tamanho = mapa.Tamanho;

            float raio  = Math.Min(tamanho.Width, tamanho.Height) / 2;
            var   faixa = (int)(raio * 0.15);

            raio *= 0.8f;

            var delta  = 2 * Math.PI / quantidadeLocais;
            var centro = tamanho.Center.ToVector2();
            var locais = Enumerable.Range(0, quantidadeLocais)
                         .Select(n => Rand.Next(faixa) + raio)
                         .Select((r, i) => new Local(
                                     'A' + i <= 'Z' ? ((char)('A' + i)).ToString() : i.ToString(),
                                     centro + new Vector2((float)(Math.Cos(delta * i) * r + (r * Math.Cos(delta * i))), (float)Math.Sin(delta * i) * r)))
                         .ToList();

            mapa.Locais = locais;

            return(mapa);
        }