fork download
  1. using static System.Console;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4.  
  5. class Program
  6. {
  7. static string[] input = {
  8. "a1=a2", "b1=b2", "b3=b2", "c1=c2", "e1=e2", "a3=a4", "c3=c4", "e1=e3",
  9. "a2=a4", "c3=c1", "b3=a4", "c2=d1", "a4=a5", "d2=c1", "b4=b3", "d3=c3"
  10. };
  11.  
  12. static void Main()
  13. {
  14. var h = new Dictionary<string, int>();
  15. var eq = input
  16. .Select(s => s.Split('=').Select(s => h.ContainsKey(s) ? h[s] : h[s] = h.Count).ToArray())
  17. .ToArray();
  18.  
  19. var g = Enumerable.Range(1, h.Count).ToArray();
  20. bool changed;
  21.  
  22. do {
  23. changed = false;
  24. foreach (var e in eq) {
  25. var (i, j) = (e[0], e[1]);
  26. if (g[i] > g[j]) {g[i] = g[j]; changed = true;}
  27. if (g[j] > g[i]) {g[j] = g[i]; changed = true;}
  28. }
  29. } while (changed);
  30.  
  31. foreach (var t in h.Keys.GroupBy(s => g[h[s]])) WriteLine($"[{string.Join(", ", t)}]");
  32. }
  33. }
Success #stdin #stdout 0.05s 32020KB
stdin
Standard input is empty
stdout
[a1, a2, b1, b2, b3, a3, a4, a5, b4]
[c1, c2, c3, c4, d1, d2, d3]
[e1, e2, e3]