首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bitboard:与邻居一起计算元素

Bitboard:与邻居一起计算元素
EN

Stack Overflow用户
提问于 2018-03-19 14:02:19
回答 1查看 245关注 0票数 0

为了表示2D棋盘游戏的状态,我使用带有16位无符号整数的位板。状态被编码为1表示片段存在,0表示其他。

的位板方法是如何计算至少有一个相邻的水平、垂直或对角线的块数?

我发现的算法(非常简化)是:

代码语言:javascript
复制
total = 0
for each bitIndex in bitscanForward(bitboard)
    total += bitPopCount(bitboard & (ADJACENT_MASK << bitIndex))
return total
  • bitScanForward函数返回第一位的索引并将其设置为0
  • bitPopCount函数返回位数

唯一的限制是板是m行x列,m <= 8。

有没有办法做到这一点,而不重复比特?

EN

回答 1

Stack Overflow用户

发布于 2018-03-19 21:45:49

获取一个有一点设置IFF的掩码,它上面有一个部件和一些相邻的部件(即有一个直接在左边,或者在右边,或者向上,或者向下,或者对角线):

代码语言:javascript
复制
mask = board & (left(board) | right(board) | up(board) | down(board) |
                left(up(board)) | left(down(board)) |
                right(up(board)) | right(down(board)))

那就数一数。

关键显然是落实董事会的“转变”,但它们真的很简单。你对方向的选择在位数方面可能会有所不同,这取决于你把比特放在一块板上的顺序。例如,4x4板的包装顺序似乎是合理的:

代码语言:javascript
复制
left(board)  = (board & 0x7777) << 1
right(board) = (board & 0xEEEE) >> 1
up(board)    = board << 4
down(board)  = board >> 4
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49364864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档