Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /// <summary>
- /// Path-based strongly connected components algorithm
- /// </summary>
- public void Path_based_SCC()
- {
- Func<Queue<Nodo>, Queue<Nodo>> SCC_DFS = null;
- SCC_DFS = (H) =>
- {
- var tempo = 0;
- Sbianca();
- Action<Nodo, Queue<Nodo>> SCCC_Visita = null;
- SCCC_Visita = (u, Z) =>
- {
- tempo++;
- u.d = tempo;
- u.colore = Nodo.Colori.Grigio;
- foreach (var v in Adj[u])
- if (v.colore == Nodo.Colori.Bianco)
- {
- v.Pred = u;
- if (Z == null)
- Console.Write(v.N + " ");
- SCCC_Visita(v, Z);
- }
- tempo++;
- u.f = tempo;
- u.colore = Nodo.Colori.Nero;
- if (Z != null)
- Z.Enqueue(u);
- };
- if (H == null)
- {
- var L = new Queue<Nodo>();
- foreach (var v in V)
- if (v.colore == Nodo.Colori.Bianco)
- SCCC_Visita(v, L);
- return L;
- }
- else
- {
- while (H.Count > 0)
- {
- var u = H.Dequeue();
- if (u.colore == Nodo.Colori.Bianco)
- {
- Console.Write("SCC: ");
- SCCC_Visita(u, null);
- Console.WriteLine(u.N + " ");
- }
- }
- return null;
- }
- };
- SCC_DFS(SCC_DFS(null));
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement