首页 > 编程语言 >二元子句归结的c++代码分析

二元子句归结的c++代码分析

时间:2023-11-11 14:55:18浏览次数:36  
标签:learnt 归结 int remove ++ other c++ 子句 out

 

 
 1 // Try further learnt clause minimization by means of binary clause resolution.
 2 bool Solver::binResMinimize(vec<Lit>& out_learnt)
 3 {
 4     // Preparation: remember which false variables we have in 'out_learnt'.
 5     counter++;
 6     for (int i = 1; i < out_learnt.size(); i++)
 7         seen2[var(out_learnt[i])] = counter;
 8 
 9     // Get the list of binary clauses containing 'out_learnt[0]'.
10     const vec<Watcher>& ws = watches_bin[~out_learnt[0]];
11 
12     int to_remove = 0;
13     for (int i = 0; i < ws.size(); i++){
14         Lit the_other = ws[i].blocker;
15         // Does 'the_other' appear negatively in 'out_learnt'?
16         if (seen2[var(the_other)] == counter && value(the_other) == l_True){
17             to_remove++;
18             seen2[var(the_other)] = counter - 1; // Remember to remove this variable.
19         }
20     }
21 
22     // Shrink.
23     if (to_remove > 0){
24         int last = out_learnt.size() - 1;
25         for (int i = 1; i < out_learnt.size() - to_remove; i++)
26             if (seen2[var(out_learnt[i])] != counter)
27                 out_learnt[i--] = out_learnt[last--];
28         out_learnt.shrink(to_remove);
29     }
30     return to_remove != 0;
31 }

 

   

 

标签:learnt,归结,int,remove,++,other,c++,子句,out
From: https://www.cnblogs.com/yuweng1689/p/17825912.html

相关文章

  • L2-037 包装机 (25 分)(C/C++)
    输入样例:344GPLTPATAOMSA3230120220-1输出样例:MATA这道题需要注意的就是当框空的时候,按下0是什么都不会发生的。当对应轨道空的时候,按下对应轨道的数字也是什么都不会发生的当对应轨道不为空,但是框满的时候,需要先把框顶的弹出来,再装进去新的。#include<iostream>#......
  • C++ insert into tables of pgsql via libpq-fe.h and compile by g++-13
    1.Installlibpq-devsudoaptinstalllibpq-devlocatelibpq-fe.h/usr/include/postgresql/libpq-fe.h 2.createtablet1createtablet1(idbigserialnotnullprimarykey,authorvarchar(40)notnull,commentvarchar(40)notnull,contentvarchar(40)notn......
  • C++简单插入排序
    voidinsertSort(inta[],intlen){ inti,j,temp; if(len==1)return; for(i=1;i<len;i++){ if(a[i]<a[i-1]){ temp=a[i]; for(j=i-1;j>=0&&a[j]>temp;j--){ a[j+1]=a[j]; }a[j+1]=temp; ......
  • C++创建二叉排序树
    voidcreate(Tree&t,intval){if(t==nullptr){t=newnode;t->data=val;t->left=t->right=nullptr;}elseif(val>t->data)create(t->right,val);elseif(val<t->data)create(t->left,val);}voidinsert(Tree&......
  • LRU算法 C++
    #pragmaonce#include<list>#include<unordered_map>usingnamespacestd;classLRUCache{public:LRUCache(intcapacity):cap(capacity){m.reserve(capacity);m.max_load_factor(0.75);}intget(intkey)......
  • C++的纯虚函数和抽象类
    在C++中,可以将虚函数声明为纯虚函数,语法格式为:virtual返回值类型函数名(函数参数)=0;纯虚函数没有函数体,只有函数声明,在虚函数声明的结尾加上=0,表明此函数为纯虚函数。最后的=0并不表示函数返回值为0,它只起形式上的作用,告诉编译系统“这是纯虚函数”。包含纯虚函数的类称为抽......
  • C++的向上转型
    在C/C++中经常会发生数据类型的转换,例如将int类型的数据赋值给float类型的变量时,编译器会先把int类型的数据转换为float类型再赋值;反过来,float类型的数据在经过类型转换后也可以赋值给int类型的变量。数据类型转换的前提是,编译器知道如何对数据进行取舍。例如:inta=......
  • C++中虚继承时的构造函数
    在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。下面我们以菱形继承为例来......
  • C++将派生类赋值给基类
    在C/C++中经常会发生数据类型的转换,例如将int类型的数据赋值给float类型的变量时,编译器会先把int类型的数据转换为float类型再赋值;反过来,float类型的数据在经过类型转换后也可以赋值给int类型的变量。数据类型转换的前提是,编译器知道如何对数据进行取舍。例如:inta=......
  • C++中的语法知识虚继承和虚基类
    多继承(MultipleInheritance)是指从多个直接基类中产生派生类的能力,多继承的派生类继承了所有父类的成员。尽管概念上非常简单,但是多个基类的相互交织可能会带来错综复杂的设计问题,命名冲突就是不可回避的一个。多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成......