基本算法思想来源于DPLL算法,对于变元策略进行了改进。具体可以参考https://github.com/Billy1900/DPLL-Algorithm
DPLL算法思想如下:
Status DPLL( S) {
/* S为公式对应的子句集。若其满足,返回TURE;否则返回FALSE. */
while(S中存在单子句) {
在S中选一个单子句L,并将单子句装入结果数组,value置为1;
依据单子句规则,利用L化简S;
if S = Φ return(TRUE);
else if (S中有空子句 ) return(FALSE);
}
对子句集中的所有变元出现次数进行排序,出现次数最多的选为最终的变元choose(次数统计规则--例:1和-1表示变元1出现了2次)
V = choose;
if DPLL(S ∪v )return(TURE);
return DPLL(S ∪¬v);
}
说明:优化算法相比DPLL算法 来讲,在选取变元策略上进行了优化。其余算法流程基本保持不变。
1)读取文件的路径在CreateClause函数中被写死,在文件的第58行,可以在此修改。
2)main函数中将文件名写死,在程序文件的第293行,可以在此做修改。