Advertisement
mikymaione

Algo_20160623

Jun 26th, 2017
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 0.99 KB | None | 0 0
  1. // dato un insieme di etichette P, si scriva un ALG(G, v, p) verifichi se tutti i percorsi infiniti che partono da v passano da almeno un vertice etichettato con p
  2. public bool Algo_20160623(int v, string p)
  3. {
  4.     var time = 0;
  5.     var ciclo = false;
  6.     var passato_per_etichetta = false;
  7.  
  8.     Action<Nodo> Visit = null;
  9.     Visit = (u) =>
  10.     {
  11.         time++;
  12.         u.discovered = time;
  13.         u.color = Nodo.Color.Gray;
  14.  
  15.         var e = getEtichetta(u);
  16.         if (p.Equals(e))
  17.             passato_per_etichetta = true;
  18.  
  19.         foreach (var w in Adj[u])
  20.             switch (w.color)
  21.             {
  22.                 case Nodo.Color.White:
  23.                     w.Pred = u;
  24.                     Visit(w);
  25.                     break;
  26.                 case Nodo.Color.Gray:
  27.                     ciclo = true;
  28.                     break;
  29.             }
  30.  
  31.         time++;
  32.         u.finished = time;
  33.         u.color = Nodo.Color.Black;
  34.     };
  35.    
  36.     Visit(get_nodo(v));
  37.  
  38.     var r = ciclo && passato_per_etichetta;
  39.  
  40.     Console.WriteLine("Per il grafo {0} {1}tutti i percorsi infiniti che partono da {2} passano da almeno un vertice etichettato con {3}", Nome, (r ? "" : "non "), v, p);
  41.  
  42.     return r;
  43. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement