SHARE
TWEET

Algo_20170224

mikymaione May 19th, 2017 52 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // O((V + E)B)
  2. public void Algo_20170224(int[] B)
  3. {
  4.     var s = "";
  5.  
  6.     foreach (var b in B)
  7.         s += $"{b} ";
  8.  
  9.     Stampa();
  10.     Console.WriteLine($"contains [{s}]? {Algo_20170224_p(B)}\n");
  11. }
  12.  
  13. private bool Algo_20170224_p(int[] B)
  14. {
  15.     Func<int[], Nodo, bool> BFS = null;
  16.     BFS = (A, s) =>
  17.     {
  18.         Sbianca();
  19.  
  20.         var Z = new HashSet<int>(A);
  21.         var Q = new Queue<Nodo>();
  22.         Q.Enqueue(s);
  23.  
  24.         s.color = Nodo.Color.Gray;
  25.         s.distance = 0;
  26.  
  27.         while (Q.Count > 0)
  28.         {
  29.             var v = Q.Dequeue();
  30.             Z.Remove(v.N);
  31.  
  32.             foreach (var w in Adj[v])
  33.             {
  34.                 Z.Remove(w.N);
  35.  
  36.                 if (w.color == Nodo.Color.White)
  37.                 {
  38.                     w.color = Nodo.Color.Gray;
  39.                     w.distance = v.distance + 1;
  40.                     w.Pred = v;
  41.                     Q.Enqueue(w);
  42.                 }
  43.             }
  44.  
  45.             v.color = Nodo.Color.Black;
  46.         }
  47.  
  48.         return Z.Count < 1;
  49.     };
  50.  
  51.  
  52.     foreach (var b in B)
  53.         if (!BFS(B, get_nodo(b)))
  54.             return false;
  55.  
  56.     return true;
  57. }
RAW Paste Data
Top