.NET 4.x Алгоритм перебора вариантов - C#

Узнай цену своей работы

Формулировка задачи:

Кто нибудь может подсказать эффективный алгоритм без рекурсии желательно: на входе есть массив массива, нужно получить все возможные варианты: например: вход: { {1} {2,3} {4,5} } выход: { {1,2,4} {1,2,5} {1,3,4} {1,3,5} }

Решение задачи: «.NET 4.x Алгоритм перебора вариантов»

textual
Листинг программы
  1. static IEnumerable<IEnumerable<T>> PowerSet<T>(IEnumerable<T> initialSet)
  2. {
  3.     var set = new List<IEnumerable<T>>() { Enumerable.Empty<T>() };
  4.     return initialSet.Aggregate((IEnumerable<IEnumerable<T>>)set, (x, y) => x.Concat(x.Select(z => z.Concat(new List<T>() { y }))));
  5. }
  6.  
  7. static void Main()
  8. {
  9.     int[][] arr =
  10.     {
  11.         new[] {1},
  12.         new[] {2,3},
  13.         new[] {4,5},
  14.     };
  15.  
  16.  
  17.     Console.WriteLine(string.Join(Environment.NewLine, PowerSet(arr.SelectMany(x => x).Distinct()).Select(s => '{' + string.Join(",", s) + '}')));
  18.     Console.ReadKey(true);
  19. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 3.727 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы