编写Python程序判断给定N×N矩阵是否构成幻方
判断给定矩阵是否为幻方
问题描述
给定一个N×N矩阵,每个元素取值范围为1到N²,当矩阵的每行、每列及两条对角线的元素和均相等时,该矩阵即为幻方。需编写Python代码判断输入矩阵是否符合幻方要求。
测试用例:
- 维度N=3
- 输入矩阵:
6 3 6 5 5 5 4 7 4
解决方案代码
def is_magic_square(matrix, n): # 验证矩阵是否为N×N结构 for row in matrix: if len(row) != n: return False # 以第一行的和作为目标校验和 target_sum = sum(matrix[0]) # 校验所有行的和是否一致 for row in matrix: if sum(row) != target_sum: return False # 校验所有列的和是否一致 for col_idx in range(n): col_sum = sum(matrix[row_idx][col_idx] for row_idx in range(n)) if col_sum != target_sum: return False # 校验主对角线(左上→右下)的和 main_diag_sum = sum(matrix[i][i] for i in range(n)) if main_diag_sum != target_sum: return False # 校验副对角线(右上→左下)的和 anti_diag_sum = sum(matrix[i][n-1-i] for i in range(n)) if anti_diag_sum != target_sum: return False # 校验所有元素是否在合法取值范围内 max_valid_val = n * n for row in matrix: for num in row: if not (1 <= num <= max_valid_val): return False return True # 测试用例 if __name__ == "__main__": test_matrix = [ [6, 3, 6], [5, 5, 5], [4, 7, 4] ] n = 3 print(is_magic_square(test_matrix, n)) # 输出:True
代码说明
- 矩阵结构校验:确保输入的每一行长度都等于N,保证是标准N×N矩阵。
- 目标和确定:以第一行的元素和作为基准值,后续所有行、列、对角线的和都需与该值匹配。
- 行/列和校验:遍历每一行和每一列,计算元素和并与目标和比对。
- 对角线和校验:分别计算主对角线(左上到右下)和副对角线(右上到左下)的元素和,验证是否等于目标和。
- 元素范围校验:检查每个元素是否在1到N²的合法取值区间内。
针对提供的测试用例,所有行、列、对角线的和均为15,且元素均在1-9的合法范围内,因此代码返回True。
内容的提问来源于stack exchange,提问作者Peoush Chakraborty
相关产品推荐
相关产品推荐

