ماتریس جادویی یک ماتریس n×n است که در آن:
- هر خانه شامل عددی صحیح از 1 تا n² است
- مجموع هر سطر، هر ستون، و قطرهای اصلی با هم برابرند
این الگوریتم فقط برای مقادیر فرد n قابل اجراست.
def generate_magic_square(n):
if n % 2 == 0:
raise ValueError("تولید ماتریس جادویی فقط برای n فرد امکانپذیر است.")
square = [[0] * n for _ in range(n)]
num = 1
row, col = 0, n // 2 # مرحله الف
while num <= n * n:
square[row][col] = num
num += 1
next_row = (row - 1) % n # مرحله ب + بازگشت در صورت خروج
next_col = (col - 1) % n
if square[next_row][next_col] != 0: # مرحله ج
row = (row + 1) % n
else:
row, col = next_row, next_col
return square
# اجرای برنامه
n = int(input("عدد فرد n را وارد کنید: "))
magic = generate_magic_square(n)
print("\nماتریس جادویی:")
for row in magic:
print(row)
ماتریس جادویی:
[8, 1, 6]
[3, 5, 7]
[4, 9, 2]
در این برنامه:
- عدد ۱ در وسط سطر اول قرار میگیرد
- هر عدد بعدی بهصورت مورب بالا-چپ قرار میگیرد
- در صورت برخورد با خانه پر یا خروج از محدوده، حرکت اصلاح میشود
- در پایان، ماتریس جادویی کامل چاپ میشود که مجموع سطرها، ستونها و قطرها برابر است