Advertisement
mikymaione

Alg_20170628_2

Jul 15th, 2017
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.11 KB | None | 0 0
  1. public bool Alg_20170628_2(int a, int b, int c)
  2. {
  3.     var Ciclo = false;
  4.     var ElaborazioneTerminataENessunCicloTrovato = false;
  5.  
  6.     var n_a = get_nodo(a);
  7.     var n_b = get_nodo(b);
  8.     var n_c = get_nodo(c);
  9.  
  10.     var S = new Stack<Nodo>();
  11.     S.Push(n_c);
  12.     S.Push(n_b);
  13.     S.Push(n_a);
  14.  
  15.     Action<Nodo> dfs = null;
  16.     dfs = (u) =>
  17.     {
  18.         u.color = Nodo.Color.Gray;
  19.  
  20.         if (S.Count > 0 && u == S.Peek())
  21.             S.Pop();
  22.  
  23.         foreach (var v in Adj[u])
  24.             if (v.color == Nodo.Color.White)
  25.                 dfs(v);
  26.             else if (S.Count < 1 && v.color == Nodo.Color.Gray)
  27.                 Ciclo = true;
  28.  
  29.         if (!Ciclo && S.Count < 1)
  30.             ElaborazioneTerminataENessunCicloTrovato = true;
  31.            
  32.         u.color = Nodo.Color.Black;
  33.     };
  34.  
  35.     Sbianca();
  36.     dfs(n_a);
  37.     var r = (Ciclo && !ElaborazioneTerminataENessunCicloTrovato);
  38.  
  39.     Console.OutputEncoding = System.Text.Encoding.UTF8;
  40.     Console.WriteLine("Nel grafo {0}, {1}esiste un percorso {2} ~> {3} ~> {4} ~> ∞", Nome, (r ? "" : "Non "), a, b, c);
  41.  
  42.     return r;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement