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 }); }
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); }
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; }
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); }