在 Sat4J/CNF 中表示扫雷约束

Representing Minesweeper Constraints in Sat4J/CNF

我正在尝试使用 SAT 求解器 (sat4j) 实现扫雷求解器,我对它们的工作原理有一个简单的了解。但是我无法弄清楚的一件事是如何表示地雷的 x+y+Z+....=2,因为 SAT 求解器使用布尔输入。如下 table 中的内容:

| a | b | c | d | e |
| f | 2 | g | 3 | h |
| i | j | k | l | m |

你可以写 a+b+c+f+g+i+j+k = 2c+d+e+g+h+k+l+m= 3

如果 a+b+c+f+g+i+j+k = 2 你的意思是周围的单元格恰好包含两个地雷,那么你的字母确实是布尔变量,并且该约束称为基数约束。

这是 Sat4j 开箱即用的支持。

您可能会在这里找到一些提示: https://sat4j.gitbooks.io/case-studies/content/