找回密码
 立即注册
搜索
热搜: 活动 交友
查看: 1067|回复: 0

棋盘的一维剖分

[复制链接]

8

主题

14

回帖

77

积分

版主

积分
77
发表于 2-9-2025 22:34:51 | 显示全部楼层 |阅读模式
如果从横向,纵向和斜向对棋盘进行剖分,那我们可以获得——
两组19个长19的列表和两组长1 2 3 4 ... 18 19 18 ... 4 3 2 1的列表!(这是废话吗 是的)
对于前面两种情况,我们可以很容易写出如下代码:
for i in range(BOARD_NUM):
            for j in range(BOARD_NUM):
                if board[i][j]==0:
                    line[j]=0
                else:
                    line[j]=(board[i][j]==对手棋子类型)+1 (这么写很欠揍,但是这么写好爽)
这样我们就可以获得一条line(横向还是纵向?),上面有0, 1和2~

那对角线可能就会难一点实现了——
for i in range(BOARD_NUM*2-1):
            line=[0 for k in range(min(i+1,37-i))]#1 2 3 ... 18 19 18 ... 3 2 1
            for j in range(min(???)):
                if i<BOARD_NUM:
                    if board[j][i-j]==0:
                        line[j]=0
                    else:
                        line[j]=(board[j][i-j]==对手棋子类型)+1
                else:
                    if board[???][???]==0:
                        line[j]=0
                    else:
                        line[j]=(board[???][???]==对手棋子类型)+1
思考:这段代码刻画的是主对角线还是副对角线?
前半部分刻画的是对角线上的line,后半部分刻画的是对角线下的line,如何正确将其取出?
这种算法可以在O(n)的复杂度内把棋盘变成列表,之后我们就可以对每一个列表进行分析,而不丢失棋盘的任何信息,因为五子棋只考虑横,纵和斜。(真的吗?)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RealDevClub ( 沪ICP备2024093864号-1 )

GMT+8, 4-12-2025 10:19 , Processed in 0.056995 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表