在 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 = 2
和 c+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/
我正在尝试使用 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 = 2
和 c+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/