Exemplo n.º 1
0
 private void relax(Vertice u, Vertice v, int w)
 {
     if (u.Descoberta != Int32.MaxValue && v.Descoberta > (u.Descoberta + w))
     {
         v.Descoberta = u.Descoberta + w;
         v.Pai = u;
     }
 }
Exemplo n.º 2
0
 private void dfsVisit(Vertice u)
 {
     componente += " " + u.Id;
     tempo++;
     u.Cor = CoresEnum.Cinza;
     u.Descoberta = tempo;
     foreach(var vertice in grafoCorrente.GetAdj(u.Id))
     {
         if (vertice.Value.Cor == CoresEnum.Branco)
         {
             vertice.Value.Pai = u;
             dfsVisit(vertice.Value);
         }
     }
     u.Cor = CoresEnum.Preto;
     tempo++;
     u.Finalizacao = tempo;
 }
Exemplo n.º 3
0
        public void dfsVisit(Vertice vertice)
        {
            tempo++;
            vertice.Descoberta++;
            vertice.Cor = CoresEnum.Cinza;

            foreach (var v in grafo.GetAdj(vertice.Id))
            {
                if (v.Cor == CoresEnum.Branco)
                {
                    v.Pai = vertice;
                    dfsVisit(v);
                }
            }

            vertice.Cor = CoresEnum.Preto;
            tempo++;
            vertice.Finalizacao = tempo;
        }
Exemplo n.º 4
0
        public static Grafo Ler(string caminhoArquivo)
        {
            var arquivo = File.ReadAllLines(caminhoArquivo);
            var retorno = new Grafo();

            var primeiraParte = true;
            foreach (var linha in arquivo)
            {
                if (linha.Equals("#"))
                {
                    primeiraParte = false;
                    continue;
                }
                if (primeiraParte)
                {
                    var vertice = new Vertice(linha);
                    retorno.Vertices.Add(linha, vertice);
                }
                else
                {
                    var carac = linha.Split(' ');
                    var tamanho = carac.Length;
                    if (tamanho <= 0 || tamanho > 3)
                        throw new Exception("Não foi possível identificar especificações da aresta no arquivo de entrada");

                    if (tamanho >= 2)
                    {
                        var origem = retorno.Vertices[carac[0]];
                        var destino = retorno.Vertices[carac[1]];
                        origem.Adjacentes.Add(destino.Id, destino);
                        var aresta = new Aresta(carac[0], carac[1]);
                        if (tamanho > 2)
                            aresta.Peso = Convert.ToInt16(carac[2]);
                        retorno.Arestas.Add(aresta);
                    }
                }
            }

            return retorno;
        }