Я пытаюсь создать собственный волшебный квадратный решатель с использованием программирования ограничений в Python. Для этого я использую ограничение python (http://labix.org/python-constraint).Magic Square Solver Использование Constraint-Programming
Для этой задачи определение магического квадрата будет следующим: «Магический квадрат - это расположение целых чисел (положительных или отрицательных) в матрице nxn и такое, что сумма записей любой строки, любого столбца, или любая основная диагональ одинакова ».
У меня есть предварительно заполненные магический квадрат, как это:
+----+----+----+----+
| 7 | | | 4 |
+----+----+----+----+
| | | | |
+----+----+----+----+
| 0 | -3 | -2 | 3 |
+----+----+----+----+
| -5 | 6 | | |
+----+----+----+----+
Вот код, я использую:
from constraint import *
problem = Problem()
problem.addVariables(range(0, 16), range(-20, 20))
problem.addConstraint(lambda a: a==7, [0])
problem.addConstraint(lambda a: a==4, [3])
problem.addConstraint(lambda a: a==0, [8])
problem.addConstraint(lambda a: a==-3, [9])
problem.addConstraint(lambda a: a==-2, [10])
problem.addConstraint(lambda a: a==3, [11])
problem.addConstraint(lambda a: a==-5, [12])
problem.addConstraint(lambda a: a==6, [13])
problem.addConstraint(ExactSumConstraint(-2), [0,5,10,15])
problem.addConstraint(ExactSumConstraint(-2), [3,6,9,12])
for row in range(4):
problem.addConstraint(ExactSumConstraint(-2),
[row*4+i for i in range(4)])
for col in range(4):
problem.addConstraint(ExactSumConstraint(-2),
[col+4*i for i in range(4)])
solutions = problem.getSolution()
print solutions
Я не могу найти какие-либо решения, в то время как я думаю, что мои ограничения исправляет. Сумма каждой строки и каждого столбца и обеих диагоналей должна быть равна -2 (в зависимости от строки, которую мы имеем на магическом квадрате).
Есть ли у вас идеи? Благодарю.
Ваше определение: волшебный квадрат? Видя отрицательные целые числа в вашем примере, похоже, противоречит обычному определению магического квадрата, а именно: «Магический квадрат - это расположение чисел от 1 до n^2 (n-квадрат) в nxn-матрице, причем каждое число происходит точно один раз и так, чтобы сумма записей любой строки, любого столбца или любой основной диагонали была одинаковой ». – boardrider
Я знаю, что это не «реальный» магический квадрат, поэтому и называется обычай Magic Square. Я отредактировал вопрос с моим определением настраиваемого магического квадрата – Zycho