Перебрать все возможные варианты расположения заполненных ячеек (комбинаторика) - C#
Формулировка задачи:
Есть 12 парных элементов, это значит что каждый элемент имеет две ячейки (всего 24 ячейки получается). 4 ячейки из 24 всегда заполнены. Каждый парный элемент может иметь только одну заполненную ячейку, это значит что те 4 заполненные ячейки находятся в 4 разных элементах. Задание: перебрать все возможные варианты расположения этих заполненных ячеек. Также, если в 1 элементе первая ячейка заполнена, а вторая нет, и в другом варианте в этом же элементе первая ячейка пустая, а вторая нет, то это считается за два разных варианта, следовательно, важна последовательность.
Если представить это в виде массива, то первый вариант будет таким:
|10|10|10|10|00|00|00|00|00|00|00|00|
Второй, возможно, будет таким (изменение подчеркнуто):
|10|10|10|01|00|00|00|00|00|00|00|00|
А вот неверный вариант:
|10|10|11|00|00|00|00|00|00|00|00|00|
Общие условия:
Требуется написать перебор на языке C#.
Программа должна перебирать все варианты как можно быстро, потому более двух вложенных циклов использовать запрещается.
Решение задачи: «Перебрать все возможные варианты расположения заполненных ячеек (комбинаторика)»
textual
Листинг программы
using System; using System.Collections.Generic; namespace ConsoleApplication198 { class Program { static void Main() { var cells = new Cell[12]; foreach (var perm in GetPermutations(cells, 0, 4)) Console.WriteLine(string.Join("", perm)); Console.ReadLine(); } public static IEnumerable<Cell[]> GetPermutations(Cell[] cells, int startPos, int count) { if (count == 0) yield return cells; else //позиция моей ячейки for(int i = startPos;i<cells.Length;i++) { //вариант 1 cells[i] = Cell._01; //возвращаем перестановки следующих ячеек foreach(var next in GetPermutations(cells, i + 1, count - 1)) yield return next; //вариант 2 cells[i] = Cell._10; //возвращаем перестановки следующих ячеек foreach (var next in GetPermutations(cells, i + 1, count - 1)) yield return next; //возвращаем как было cells[i] = Cell._00; } } } enum Cell { _00, _01, _10 } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д