/// <summary> /// Определяет, есть ли у каждого блока своя пара. /// </summary> /// <param name="blockArray">Массив блоков.</param> /// <returns>Истина, если у каждого блока есть пара.</returns> private bool AllPairsIsFound(Block[] blockArray) { for (int i = 0; i < blockArray.Length; i++) { if (blockArray[blockArray[i].PairBlockId].PairBlockId != i) { return false; } } return true; }
/// <summary> /// Формирует массив попарносвязанных блоков. /// </summary> /// <param name="blockNumber">Количество блоков.</param> /// <returns>Массив парных блоков.</returns> public Block[] BuildPairBlocks(int blockNumber) { if (blockNumber % 2 != 0) { throw new InvalidOperationException("Количество блоков должно быть четным!"); } var pull = new IndexPull(blockNumber); var blocks = new Block[blockNumber]; var marks = new bool[blockNumber]; for (int i = blocks.Length - 1; i >= 0; i--) { blocks[i].Id = i; pull.RemoveIndex(i); if (marks[i] == false) { int pairId = pull.PopIndex(); blocks[i].PairBlockId = pairId; blocks[pairId].PairBlockId = i; marks[pairId] = true; } Settings.CongruenceArray[i] = blocks[i].PairBlockId; } return blocks; }