为了表示 2D 棋盘游戏的状态,我使用了16 位无符号整数的位板。状态编码为 1 表示存在,否则为 0。
计算在水平、垂直或对角线上至少有一个相邻块的块数的位板方法是什么?
我发现的算法(非常简化)是:
total = 0
for each bitIndex in bitscanForward(bitboard)
total += bitPopCount(bitboard & (ADJACENT_MASK << bitIndex))
return total
- bitScanForward 函数返回第一位的索引并将其设置为 0
- bitPopCount 函数返回位数
唯一的限制是板是 m 行 xm 列且 m <= 8。
有没有办法在不循环比特的情况下做到这一点?