初始问题:对于给定的3x3井字棋棋盘,检查是否有一方玩家获胜。
我想到的最简单的解决方法是旋转矩阵并求每行的和:
board
[[0, 1, 2], [3, 4, 5], [6, 7, 8]]
pr(board)
0 1 2
3 4 5
6 7 8
pr(zip(*board))
0 3 6
1 4 7
2 5 8
上面的0..9数字仅用于显示棋盘上的位置,通常它们会填充为1代表玩家1,-1代表玩家2,0代表未填充的位置。逐行扫描,如果总和为3或-3,则是获胜块。
然而,对角线没有被检查。有没有一种优雅且高效的方法从这样的矩阵中提取对角线呢?我不是指使用“手动”(0、1、2)等平凡的索引,而是获取n x n矩阵的对角线。
P.S.这里的pr只是一个打印二维列表的辅助函数:
def pr(x):
for row in x:
print ' '.join(map(str, row))
pr
函数是什么? - David Robinson