给定一组数字, 一组有9个数字,将这9个数字填写到33 的九宫格内;使得横,竖,斜对角一条线上的三个数字之和相等;如果无解则打印无解;
参考https://blog.csdn.net/LANGZI7758521/article/details/81542941这位老哥的c语言写法,用Python3再实现一遍
# 时间复杂度为 O(n)
def Nine(input_list=[1, 2, 3, 4, 5, 6, 7, 8, 9]):
t_array = [[0 for i in range(3)] for j in range(3)] # 生成空数组 3 * 3
x, y = 0, 1
t_array[x][y] = input_list[0]
k = 1
while k < 9:
x_new = x - 1
y_new = y + 1
if x_new < 0: x_new = 2
if y_new > 2: y_new = 0
if t_array[x_new][y_new] != 0: # 判定该处是否已尽填充值
x_new = x + 1
y_new = y
t_array[x_new][y_new] = input_list[k]
x = x_new
y = y_new
k += 1
row1 = t_array[0][0] + t_array[0][1] + t_array[0][2]
row2 = t_array[1][0] + t_array[1][1] + t_array[1][2]
row3 = t_array[2][0] + t_array[2][1] + t_array[2][2]
col1 = t_array[0][0] + t_array[1][0] + t_array[2][0]
col2 = t_array[0][1] + t_array[1][1] + t_array[2][1]
col3 = t_array[0][2] + t_array[1][2] + t_array[2][2]
dig1 = t_array[0][0] + t_array[1][1] + t_array[2][2]
dig2 = t_array[2][0] + t_array[1][1] + t_array[0][2]
if row1 == row2 and row1 == row3 and row1 == col1 and row1 == col2 and row1 == col3 and row1 == dig1 and row1 == dig2:
print(t_array)
else:
print("无解!!!")
if __name__ == "__main__":
input_list = input("请输入列表:") # 输入九个数字
"""输入格式:1,2,3,4,5,6,7,8,9 """
input_list = sorted([int(i) for i in input_list.split(",")]) # 将输入转换为列表并正序排列
Nine(input_list=input_list) # 有默认值供测试
关于时间复杂度和空间复杂度有懂的老哥可以留言