public void AdicionaAresta(Vertice v2, int peso) { Aresta a = new Aresta(this, v2, peso); Arestas.Add(a); //Adjacentes.Add(v2); }
/// <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); }
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); } }
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); }
/// <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()); }
public Aresta ObtenhaAresta(int Id) { return(Arestas.Where(x => x.Id == Id).FirstOrDefault()); }
public Aresta ObtenhaAresta(int idOrigem, int idDestino) { return(Arestas.Where(x => x.Origem == idOrigem && x.Destino == idDestino).FirstOrDefault()); }
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); }
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); }
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); }
public void AddAresta(Aresta aresta) { Arestas.Add(aresta); }
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); }
private void EditarAresta(int Origem, int Destino, int Peso) { Arestas[Arestas.FindIndex(x => x.Origem == Origem && x.Destino == Destino)].Peso = Peso; }