Advertisement
pifka

Set Cover

Sep 6th, 2019
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1.  
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5.  
  6. public class SetCover
  7. {
  8. public static void Main(string[] args)
  9. {
  10. var universe = new[] { 1, 3, 5, 7, 9, 11, 20, 30, 40 };
  11. var sets = new[]
  12. {
  13. new[] { 20 },
  14. new[] { 1, 5, 20, 30 },
  15. new[] { 3, 7, 20, 30, 40 },
  16. new[] { 9, 30 },
  17. new[] { 11, 20, 30, 40 },
  18. new[] { 3, 7, 40 }
  19. };
  20.  
  21. var selectedSets = ChooseSets(sets.ToList(), universe.ToList());
  22. Console.WriteLine($"Sets to take ({selectedSets.Count}):");
  23. foreach (var set in selectedSets)
  24. {
  25. Console.WriteLine($"{{ {string.Join(", ", set)} }}");
  26. }
  27. }
  28.  
  29. public static List<int[]> ChooseSets(IList<int[]> sets, IList<int> universe)
  30. {
  31. var selectedSets = new List<int[]>();
  32. while (universe.Count > 0)
  33. {
  34. var currentSet = sets.OrderByDescending(s => s.Count(universe.Contains)).First();
  35. selectedSets.Add(currentSet);
  36. sets.Remove(currentSet);
  37. foreach (var el in currentSet)
  38. {
  39. universe.Remove(el);
  40. }
  41. }
  42.  
  43. return selectedSets;
  44. }
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement