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