Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // O((V + E)B)
- public void Algo_20170224(int[] B)
- {
- var s = "";
- foreach (var b in B)
- s += $"{b} ";
- Stampa();
- Console.WriteLine($"contains [{s}]? {Algo_20170224_p(B)}\n");
- }
- private bool Algo_20170224_p(int[] B)
- {
- Func<int[], Nodo, bool> BFS = null;
- BFS = (A, s) =>
- {
- Sbianca();
- var Z = new HashSet<int>(A);
- var Q = new Queue<Nodo>();
- Q.Enqueue(s);
- s.color = Nodo.Color.Gray;
- s.distance = 0;
- while (Q.Count > 0)
- {
- var v = Q.Dequeue();
- Z.Remove(v.N);
- foreach (var w in Adj[v])
- {
- Z.Remove(w.N);
- if (w.color == Nodo.Color.White)
- {
- w.color = Nodo.Color.Gray;
- w.distance = v.distance + 1;
- w.Pred = v;
- Q.Enqueue(w);
- }
- }
- v.color = Nodo.Color.Black;
- }
- return Z.Count < 1;
- };
- foreach (var b in B)
- if (!BFS(B, get_nodo(b)))
- return false;
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement