.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
Листинг программы
static IEnumerable<IEnumerable<T>> PowerSet<T>(IEnumerable<T> initialSet) { var set = new List<IEnumerable<T>>() { Enumerable.Empty<T>() }; return initialSet.Aggregate((IEnumerable<IEnumerable<T>>)set, (x, y) => x.Concat(x.Select(z => z.Concat(new List<T>() { y })))); } static void Main() { int[][] arr = { new[] {1}, new[] {2,3}, new[] {4,5}, }; Console.WriteLine(string.Join(Environment.NewLine, PowerSet(arr.SelectMany(x => x).Distinct()).Select(s => '{' + string.Join(",", s) + '}'))); Console.ReadKey(true); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д