Вспомнила, что я умею строить обычные МК
Построила такой МК из чисел Массива №2.
И вот имеем два ортогональных покрытия Массива №2:
Код:
Строки - покрытие вида (0 0 5 1 1)
127 13 31 101 227 229 5
67 211 157 197 7 71 23
131 193 83 11 113 29 173
179 3 103 191 107 41 109
59 79 149 97 43 139 167
19 53 73 89 199 61 239
151 181 137 47 37 163 17
Код:
Столбцы - покрытие вида (0 1 4 0 2)
151 19 59 179 131 67 127
181 53 79 3 193 211 13
137 73 149 103 83 157 31
47 89 97 191 11 197 101
37 199 43 107 113 7 227
163 61 139 41 29 71 229
17 239 167 109 173 23 5
А покрытия-то получились нужного вида. Это очень интересно!
Но в магическом квадрате ещё и главные диагонали тоже годные цепочки, имеем по одной цепочке в последних двух покрытиях:
Код:
127 211 83 191 43 61 17
(цепочка вида 3)
и
Код:
151 53 149 191 113 71 5
(цепочка вида 5)
Ну и вот. Есть два ортогональных покрытия и по одной цепочке в двух последних покрытиях. Всё правильное и всё нужного вида.
Осталось найти по 6 недостающих цепочек в последних двух покрытиях с соблюдением всех условий. Но это непростая задача.
Как писать программу нахождения набора из 4-х попарно ортогональных покрытий, пока не придумала
-- Пн сен 02, 2013 15:15:39 --А как проверить набор 4-х попарно ортогональных покрытий на возможность сделать из них пандиагональный квадрат? Это требует бльшого объёма перебора?
Перебор не большой, особенно если N простое.
Поясню алгоритм для этого случая.
Четыре покрытия можно объединить в пары только тремя способами.
Вот их-то и придётся перебрать.
Пусть нам даны две пары покрытий.
Любую из пар выберем в качестве "рядов" (строки и столбцы), во второй паре будут, соответственно, диагонали.
Возьмём произвольную диагональ. Если данным парам покрытий соответствует пандиагональный квадрат, то также имеется пандиагональный квадрат у которого главная диагональ совпадает с выбранной. Более того, наименьшее число этой диагонали можно поместить в левый верхний угол. А так как N простое, то наибольшее число этой диагонали можно поместить в правый нижний угол.
Это сразу даёт ещё два числа в двух других углах, и вместе с ними побочную диагональ.
Пересечение главной и побочной диагоналей даёт центр, и вместе с ним два ряда проходящих через центр. Эти ряды пересекаются с уже известными четырьмя рядами (границами квадрата) ещё в четырёх точках.
Продолжая в том же духе заполним весь квадрат, если это возможно.
Вот этот алгоритм превращения 4-х попарно ортогональных покрытий в пандиагональный квадрат хочу рассмотреть внимательнее.
Надо доказать гипотезу, которую выдвинул whitefox: любой набор из 4-х попарно ортогональных точных покрытий массива из 49 чисел даёт пандиагональный квадрат.А поскольку мы сейчас решаем задачу для порядка 7, то и доказывать эту гипотезу будем для простых порядков.
whitefoxмне непонятно, почему:
Цитата:
А так как N простое, то наибольшее число этой диагонали можно поместить в правый нижний угол.