Esempio n. 1
0
        public void AdicionaAresta(Vertice v2, int peso)
        {
            Aresta a = new Aresta(this, v2, peso);

            Arestas.Add(a);
            //Adjacentes.Add(v2);
        }
Esempio n. 2
0
 /// <summary>
 /// Adds Aresta into Grafo
 /// </summary>
 /// <param name="a">TODO</param>
 /// <returns></returns>
 public bool RemoveAresta(Aresta a)
 {
     if (a.isDirected == isDigraph)
     {
         Arestas.Remove(a);
     }
     return(false);
 }
Esempio n. 3
0
 public override bool VerificaSolucaoCompleta()
 {
     if (Arestas.LastOrDefault().CidadeDestino == CidadeInicial)
     {
         return(true);
     }
     else
     {
         return(false);
     }
 }
        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);
            }
        }
Esempio n. 6
0
        public void AdicionaAresta(int Origem, int Destino, int Peso, int id = -1)
        {
            AdicionaVertice(Origem);
            AdicionaVertice(Destino);
            Aresta aresta = ObtenhaAresta(Origem, Destino);

            if (aresta is object)
            {
                EditarAresta(Origem, Destino, Peso);
            }
            else
            {
                Arestas.Add(new Aresta()
                {
                    Origem  = Origem,
                    Destino = Destino,
                    Peso    = Peso,
                    Id      = id
                });
            }
            AdicionaVerticeAdjacente(Origem, Destino);
        }
Esempio n. 7
0
        /// <summary>
        /// Adds Aresta into Grafo
        /// </summary>
        /// <param name="a"></param>
        /// <returns></returns>
        public bool AddAresta(Aresta a)
        {
            if (a.isDirected == isDigraph)
            {
                if (!Vertices.Contains(a.vertice1))
                {
                    Vertices.Add(a.vertice1);
                }

                if (!Vertices.Contains(a.vertice2))
                {
                    Vertices.Add(a.vertice2);
                }

                Arestas.Add(a);

                if (a.vertice1._id == a.vertice2._id)
                {
                    isAciclic = false;                                   // no longer aciclic
                }
            }
            return(false);
        }
        public void AdicionarAresta()
        {
            MensagemDeErro = string.Empty;

            if (Arestas.Any(a => (a.Antecessor.Identificador == Antecessor && a.Sucessor.Identificador == Sucessor) ||
                            (a.Sucessor.Identificador == Antecessor && a.Antecessor.Identificador == Sucessor)))
            {
                MensagemDeErro = "Os vertices selecionados já estão ligados entre si.";
                return;
            }
            else if (Antecessor == Sucessor)
            {
                MensagemDeErro = "Não é possível fazer essa ligação.";
                return;
            }

            Aresta.Antecessor = Vertices.First(v => v.Identificador == Antecessor);
            Aresta.Sucessor   = Vertices.First(v => v.Identificador == Sucessor);
            Aresta.Codigo     = Arestas.Any() ? Arestas.Last().Codigo++ : 0;
            Arestas.Add(Aresta);

            Aresta = new Aresta();
        }
        private List <Economia> ObterListaDeEconomias()
        {
            var economias           = new List <Economia>();
            var sede                = Vertices.First(v => v.Identificador == "Sede");
            var arestasLigadasASede = Arestas.Where(a => a.Antecessor == sede || a.Sucessor == sede);

            foreach (var aresta in Arestas)
            {
                var i = aresta.Antecessor;
                var j = aresta.Sucessor;
                var arestasAPartirDaSede = arestasLigadasASede.Where(a => a.Antecessor == i || a.Sucessor == i || a.Antecessor == j || a.Sucessor == j);

                var economia = new Economia()
                {
                    ArestaIJ = aresta,
                    ArestaJK = arestasAPartirDaSede.First(a => a.Antecessor == j || a.Sucessor == j),
                    ArestaKI = arestasAPartirDaSede.First(a => a.Antecessor == i || a.Sucessor == i)
                };

                economias.Add(economia);
            }

            return(economias.OrderByDescending(e => e.Valor).ToList());
        }
Esempio n. 10
0
 public Aresta ObtenhaAresta(int Id)
 {
     return(Arestas.Where(x => x.Id == Id).FirstOrDefault());
 }
Esempio n. 11
0
 public Aresta ObtenhaAresta(int idOrigem, int idDestino)
 {
     return(Arestas.Where(x => x.Origem == idOrigem && x.Destino == idDestino).FirstOrDefault());
 }
Esempio n. 12
0
 public Aresta GetAresta(int Id)
 {
     return(Arestas.Where((x) => x.Id == Id).FirstOrDefault());
 }
 public void RemoverVertice(Vertice vertice)
 {
     Arestas.RemoveAll(a => a.Antecessor == vertice || a.Sucessor == vertice);
     Vertices.Remove(vertice);
 }
Esempio n. 14
0
        public void GerarGrafoParaBuscas(bool ehOrientado)
        {
            var vertice0 = new Vertice()
            {
                Codigo        = 0,
                Identificador = "0"
            };

            var vertice1 = new Vertice()
            {
                Codigo        = 1,
                Identificador = "1"
            };

            var vertice2 = new Vertice()
            {
                Codigo        = 2,
                Identificador = "2"
            };

            var vertice3 = new Vertice()
            {
                Codigo        = 3,
                Identificador = "3"
            };

            var vertice4 = new Vertice()
            {
                Codigo        = 4,
                Identificador = "4"
            };

            var vertice5 = new Vertice()
            {
                Codigo        = 5,
                Identificador = "5"
            };

            var vertice6 = new Vertice()
            {
                Codigo        = 6,
                Identificador = "6"
            };

            Vertices.Add(vertice0);
            Vertices.Add(vertice1);
            Vertices.Add(vertice2);
            Vertices.Add(vertice3);
            Vertices.Add(vertice4);
            Vertices.Add(vertice5);
            Vertices.Add(vertice6);

            var aresta1 = new Aresta()
            {
                Codigo        = 0,
                Identificador = "a",
                Antecessor    = vertice1,
                Sucessor      = vertice2,
                Custo         = 2,
                EhOrientado   = ehOrientado
            };

            var aresta2 = new Aresta()
            {
                Codigo        = 1,
                Identificador = "b",
                Antecessor    = vertice1,
                Sucessor      = vertice6,
                Custo         = 6,
                EhOrientado   = ehOrientado
            };

            var aresta3 = new Aresta()
            {
                Codigo        = 2,
                Identificador = "c",
                Antecessor    = vertice6,
                Sucessor      = vertice4,
                Custo         = 3,
                EhOrientado   = ehOrientado
            };

            var aresta4 = new Aresta()
            {
                Codigo        = 3,
                Identificador = "d",
                Antecessor    = vertice4,
                Sucessor      = vertice5,
                Custo         = 7,
                EhOrientado   = ehOrientado
            };

            var aresta5 = new Aresta()
            {
                Codigo        = 4,
                Identificador = "e",
                Antecessor    = vertice5,
                Sucessor      = vertice0,
                Custo         = 1,
                EhOrientado   = ehOrientado
            };

            var aresta6 = new Aresta()
            {
                Codigo        = 5,
                Identificador = "f",
                Antecessor    = vertice0,
                Sucessor      = vertice1,
                Custo         = 5,
                EhOrientado   = ehOrientado
            };

            var aresta7 = new Aresta()
            {
                Codigo        = 6,
                Identificador = "g",
                Antecessor    = vertice6,
                Sucessor      = vertice3,
                Custo         = 3,
                EhOrientado   = ehOrientado
            };

            Arestas.Add(aresta1);
            Arestas.Add(aresta2);
            Arestas.Add(aresta3);
            Arestas.Add(aresta4);
            Arestas.Add(aresta5);
            Arestas.Add(aresta6);
            Arestas.Add(aresta7);
        }
 public void RemoverAresta(Aresta aresta)
 {
     Arestas.Remove(aresta);
 }
Esempio n. 16
0
        public void GerarGrafoParaPrim()
        {
            var verticeA = new Vertice()
            {
                Codigo        = 0,
                Identificador = "A"
            };

            var verticeB = new Vertice()
            {
                Codigo        = 1,
                Identificador = "B"
            };

            var verticeC = new Vertice()
            {
                Codigo        = 2,
                Identificador = "C"
            };

            var verticeD = new Vertice()
            {
                Codigo        = 3,
                Identificador = "D"
            };

            var verticeE = new Vertice()
            {
                Codigo        = 4,
                Identificador = "E"
            };

            Vertices.Add(verticeA);
            Vertices.Add(verticeB);
            Vertices.Add(verticeC);
            Vertices.Add(verticeD);
            Vertices.Add(verticeE);

            var aresta1 = new Aresta()
            {
                Codigo        = 0,
                Identificador = "ab",
                Antecessor    = verticeA,
                Sucessor      = verticeB,
                Custo         = 9,
                EhOrientado   = false
            };

            var aresta2 = new Aresta()
            {
                Codigo        = 1,
                Identificador = "be",
                Antecessor    = verticeB,
                Sucessor      = verticeE,
                Custo         = 5,
                EhOrientado   = false
            };

            var aresta3 = new Aresta()
            {
                Codigo        = 2,
                Identificador = "ec",
                Antecessor    = verticeE,
                Sucessor      = verticeC,
                Custo         = 5,
                EhOrientado   = false
            };

            var aresta4 = new Aresta()
            {
                Codigo        = 3,
                Identificador = "ca",
                Antecessor    = verticeC,
                Sucessor      = verticeA,
                Custo         = 5,
                EhOrientado   = false
            };

            var aresta5 = new Aresta()
            {
                Codigo        = 4,
                Identificador = "ad",
                Antecessor    = verticeA,
                Sucessor      = verticeD,
                Custo         = 2,
                EhOrientado   = false
            };

            var aresta6 = new Aresta()
            {
                Codigo        = 5,
                Identificador = "db",
                Antecessor    = verticeD,
                Sucessor      = verticeB,
                Custo         = 6,
                EhOrientado   = false
            };

            var aresta7 = new Aresta()
            {
                Codigo        = 6,
                Identificador = "de",
                Antecessor    = verticeD,
                Sucessor      = verticeE,
                Custo         = 3,
                EhOrientado   = false
            };

            var aresta8 = new Aresta()
            {
                Codigo        = 7,
                Identificador = "dc",
                Antecessor    = verticeD,
                Sucessor      = verticeC,
                Custo         = 4,
                EhOrientado   = false
            };

            Arestas.Add(aresta1);
            Arestas.Add(aresta2);
            Arestas.Add(aresta3);
            Arestas.Add(aresta4);
            Arestas.Add(aresta5);
            Arestas.Add(aresta6);
            Arestas.Add(aresta7);
            Arestas.Add(aresta8);
        }
Esempio n. 17
0
 public void AddAresta(Aresta aresta)
 {
     Arestas.Add(aresta);
 }
Esempio n. 18
0
        public void GerarGrafoParaProblemaDoCaixeiroViajante()
        {
            var origem = new Vertice()
            {
                Codigo        = 0,
                Identificador = "Sede"
            };

            var clienteA = new Vertice()
            {
                Codigo        = 1,
                Identificador = "Cliente A"
            };

            var clienteB = new Vertice()
            {
                Codigo        = 2,
                Identificador = "Cliente B"
            };

            var clienteC = new Vertice()
            {
                Codigo        = 3,
                Identificador = "Cliente C"
            };

            var clienteD = new Vertice()
            {
                Codigo        = 4,
                Identificador = "Cliente D"
            };

            var clienteE = new Vertice()
            {
                Codigo        = 5,
                Identificador = "Cliente E"
            };

            Vertices.Add(origem);
            Vertices.Add(clienteA);
            Vertices.Add(clienteB);
            Vertices.Add(clienteC);
            Vertices.Add(clienteD);
            Vertices.Add(clienteE);

            var aresta0 = new Aresta()
            {
                Codigo     = 0,
                Custo      = 10,
                Antecessor = clienteA,
                Sucessor   = clienteB
            };

            var aresta1 = new Aresta()
            {
                Codigo     = 1,
                Custo      = 7,
                Antecessor = clienteB,
                Sucessor   = clienteC
            };

            var aresta2 = new Aresta()
            {
                Codigo     = 2,
                Custo      = 8,
                Antecessor = clienteC,
                Sucessor   = clienteD
            };

            var aresta3 = new Aresta()
            {
                Codigo     = 3,
                Custo      = 10,
                Antecessor = clienteD,
                Sucessor   = clienteE
            };

            var aresta4 = new Aresta()
            {
                Codigo     = 4,
                Custo      = 10,
                Antecessor = clienteE,
                Sucessor   = clienteA
            };

            var aresta5 = new Aresta()
            {
                Codigo     = 5,
                Custo      = 18,
                Antecessor = clienteA,
                Sucessor   = clienteD
            };

            var aresta6 = new Aresta()
            {
                Codigo     = 6,
                Custo      = 12,
                Antecessor = clienteA,
                Sucessor   = clienteC
            };

            var aresta7 = new Aresta()
            {
                Codigo     = 7,
                Custo      = 12,
                Antecessor = clienteB,
                Sucessor   = clienteE
            };

            var aresta8 = new Aresta()
            {
                Codigo     = 8,
                Custo      = 12,
                Antecessor = clienteB,
                Sucessor   = clienteD
            };

            var aresta9 = new Aresta()
            {
                Codigo     = 9,
                Custo      = 12,
                Antecessor = clienteC,
                Sucessor   = clienteE
            };

            var aresta10 = new Aresta()
            {
                Codigo     = 10,
                Custo      = 10,
                Antecessor = origem,
                Sucessor   = clienteA
            };

            var aresta11 = new Aresta()
            {
                Codigo     = 11,
                Custo      = 5,
                Antecessor = origem,
                Sucessor   = clienteB
            };

            var aresta12 = new Aresta()
            {
                Codigo     = 12,
                Custo      = 5,
                Antecessor = origem,
                Sucessor   = clienteC
            };

            var aresta13 = new Aresta()
            {
                Codigo     = 13,
                Custo      = 10,
                Antecessor = origem,
                Sucessor   = clienteD
            };

            var aresta14 = new Aresta()
            {
                Codigo     = 14,
                Custo      = 10,
                Antecessor = origem,
                Sucessor   = clienteE
            };

            Arestas.Add(aresta0);
            Arestas.Add(aresta1);
            Arestas.Add(aresta2);
            Arestas.Add(aresta3);
            Arestas.Add(aresta4);
            Arestas.Add(aresta5);
            Arestas.Add(aresta6);
            Arestas.Add(aresta7);
            Arestas.Add(aresta8);
            Arestas.Add(aresta9);
            Arestas.Add(aresta10);
            Arestas.Add(aresta11);
            Arestas.Add(aresta12);
            Arestas.Add(aresta13);
            Arestas.Add(aresta14);
        }
Esempio n. 19
0
 private void EditarAresta(int Origem, int Destino, int Peso)
 {
     Arestas[Arestas.FindIndex(x => x.Origem == Origem && x.Destino == Destino)].Peso = Peso;
 }