bitstringtotaler.java

来自「Java版的SAT求解器」· Java 代码 · 共 52 行

JAVA
52
字号
/* * BitStringTotaler.java	1.0 05/04/15 * * Copyright 2004-2005 Positronic Software. * * */package positronic.satisfiability.bitstring;import positronic.satisfiability.bitstring.IBitString;import positronic.satisfiability.elements.Conjunction;import positronic.satisfiability.elements.IProblem;import positronic.satisfiability.elements.Problem;import positronic.satisfiability.naturalnumber.INaturalNumber;import positronic.satisfiability.naturalnumber.NaturalNumber;import positronic.satisfiability.naturalnumber.NaturalNumberAdder;import positronic.satisfiability.naturalnumber.NaturalNumberEqualizer;import positronic.satisfiability.naturalnumber.NaturalNumberFromBitConverter;public class BitStringTotaler extends Problem implements IProblem{  private static final long serialVersionUID = 1L;  public BitStringTotaler(IBitString X, INaturalNumber Z) throws Exception  {    INaturalNumber[] N=new INaturalNumber[X.size()];    NaturalNumberFromBitConverter[] nnfbc=new NaturalNumberFromBitConverter[X.size()];    for(int i=0;i<N.length;i++)    {      N[i]=new NaturalNumber();      nnfbc[i]=new NaturalNumberFromBitConverter(N[i],X.getBooleanVariable(i));    }    IProblem problem=new Conjunction(nnfbc);    if(N.length>1)    {      NaturalNumberAdder[] ad=new NaturalNumberAdder[N.length-1];      INaturalNumber[] subtotal=new INaturalNumber[N.length-1];      for(int i=0;i<subtotal.length;i++)        subtotal[i]=new NaturalNumber("subTotal_"+i);      ad[0]=new NaturalNumberAdder(N[0],N[1],subtotal[0]);      for(int i=1;i<N.length-1;i++)        ad[i]=new NaturalNumberAdder(subtotal[i-1],N[i+1],subtotal[i]);      problem=new Conjunction(problem,new Conjunction(ad),new NaturalNumberEqualizer(Z,subtotal[N.length-2]));    }    else      problem=new Conjunction(problem,new NaturalNumberEqualizer(Z,N[0]));    this.setClauses(problem.getClauses());  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?