public void AplicarAlgoritmoDasEconomias()
        {
            var sede     = Vertices.First(v => v.Identificador == "Sede");
            var corAtual = Cores.First(c => c.Nome == "Vermelho");

            const int distanciaMaxima             = 30;
            var       maiorCustoDeArestaParaASede = Arestas.Where(a => a.Antecessor == sede).OrderByDescending(a => a.Custo).First().Custo;

            var economias        = ObterListaDeEconomias();
            var verticesPassados = new List <Vertice>();

            while (economias.Any())
            {
                var economiaAtual = economias.First();
                var valorTotalIndoEVoltandoParaSede = economiaAtual.ArestaJK.Custo * 2 + economiaAtual.ArestaKI.Custo * 2;
                var valorPegandoAtalho = economiaAtual.ArestaIJ.Custo + economiaAtual.ArestaJK.Custo + economiaAtual.ArestaKI.Custo;

                if (valorTotalIndoEVoltandoParaSede > valorPegandoAtalho)
                {
                    CustoTotal += economiaAtual.ArestaIJ.Custo;

                    economiaAtual.ArestaIJ.Cor = corAtual.Hexadecimal;

                    if (verticesPassados.Contains(economiaAtual.ArestaIJ.Antecessor) || verticesPassados.Contains(economiaAtual.ArestaIJ.Sucessor))
                    {
                        var verticeReferencia      = verticesPassados.Contains(economiaAtual.ArestaIJ.Antecessor) ? economiaAtual.ArestaIJ.Antecessor : economiaAtual.ArestaIJ.Sucessor;
                        var arestasASeremRemovidas = Arestas.Where(a => a.Antecessor == verticeReferencia || a.Sucessor == verticeReferencia);
                        economias.RemoveAll(a => arestasASeremRemovidas.Contains(a.ArestaIJ));
                    }

                    verticesPassados.Add(economiaAtual.ArestaIJ.Antecessor);
                    verticesPassados.Add(economiaAtual.ArestaIJ.Sucessor);
                }
                else
                {
                    CustoTotal += valorTotalIndoEVoltandoParaSede;

                    economiaAtual.ArestaJK.Cor = corAtual.Hexadecimal;
                    economiaAtual.ArestaKI.Cor = corAtual.Hexadecimal;

                    var arestaJKContraria = Arestas.First(a => a.Antecessor == economiaAtual.ArestaJK.Sucessor && a.Sucessor == economiaAtual.ArestaJK.Antecessor);
                    arestaJKContraria.Cor = corAtual.Hexadecimal;

                    var arestaKIContraria = Arestas.First(a => a.Antecessor == economiaAtual.ArestaKI.Sucessor && a.Sucessor == economiaAtual.ArestaKI.Antecessor);
                    arestaKIContraria.Cor = corAtual.Hexadecimal;
                }

                Economias.Add(economiaAtual);
                economias.Remove(economiaAtual);
            }
        }
        public void PintarArestasDeIdaEVolta()
        {
            var arestasDaOrigem = Arestas.Where(a => a.Antecessor.Identificador == "Sede").ToList();
            var corLaranja      = Cores.First(c => c.Nome == "Laranja");

            foreach (var aresta in arestasDaOrigem)
            {
                aresta.Cor = corLaranja.Hexadecimal;

                var arestaNova = new Aresta()
                {
                    Codigo     = Arestas.Last().Codigo + 1,
                    Custo      = aresta.Custo,
                    Antecessor = aresta.Sucessor,
                    Sucessor   = aresta.Antecessor,
                    Cor        = corLaranja.Hexadecimal
                };

                Arestas.Add(arestaNova);
            }
        }