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