我试图使用SAT解算器(sat4j)实现扫雷解算器,我对它们的工作原理有一个简单的了解。但有一点我无法弄清楚如何代表地雷x+y+Z+....=2
,因为SAT求解器使用布尔输入。如下表所示:
| 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
。
答案 0 :(得分:0)
如果a+b+c+f+g+i+j+k = 2
表示周围的单元格恰好包含两个地雷,那么你的字母确实是布尔变量,而这个约束称为基数约束。
这是由Sat4j开箱即用的。
您可以在此处找到一些提示: https://sat4j.gitbooks.io/case-studies/content/