bitstringgroup.java
来自「Java版的SAT求解器」· Java 代码 · 共 130 行
JAVA
130 行
package positronic.satisfiability.bitstringgroup;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import positronic.satisfiability.bitstring.BitString;
import positronic.satisfiability.bitstring.BitStringPair;
import positronic.satisfiability.bitstring.IBitString;
import positronic.satisfiability.bitstringlist.BitStringList;
import positronic.satisfiability.bitstringlist.IBitStringList;
public class BitStringGroup implements IBitStringGroup
{
/**
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception
{
IBitStringList X=new BitStringList("X",
new IBitString[]
{
new BitString("00"),
new BitString("01"),
new BitString("10"),
new BitString("11")
});
IBitStringGroup group=new BitStringGroup(X);
group.addRule(X.getBitString(0),X.getBitString(0),X.getBitString(0));
group.addRule(X.getBitString(0),X.getBitString(1),X.getBitString(1));
group.addRule(X.getBitString(0),X.getBitString(2),X.getBitString(2));
group.addRule(X.getBitString(0),X.getBitString(3),X.getBitString(3));
group.addRule(X.getBitString(1),X.getBitString(0),X.getBitString(1));
group.addRule(X.getBitString(1),X.getBitString(1),X.getBitString(2));
group.addRule(X.getBitString(1),X.getBitString(2),X.getBitString(3));
group.addRule(X.getBitString(1),X.getBitString(3),X.getBitString(0));
group.addRule(X.getBitString(2),X.getBitString(0),X.getBitString(2));
group.addRule(X.getBitString(2),X.getBitString(1),X.getBitString(3));
group.addRule(X.getBitString(2),X.getBitString(2),X.getBitString(0));
group.addRule(X.getBitString(2),X.getBitString(3),X.getBitString(1));
group.addRule(X.getBitString(3),X.getBitString(0),X.getBitString(3));
group.addRule(X.getBitString(3),X.getBitString(1),X.getBitString(0));
group.addRule(X.getBitString(3),X.getBitString(2),X.getBitString(1));
group.addRule(X.getBitString(3),X.getBitString(3),X.getBitString(2));
System.out.println(group);
}
private HashMap bsg=new HashMap();
private String name;
public BitStringGroup(IBitStringGroup X)
{
this.setName(X.getName());
this.getMap().putAll(((BitStringGroup)X).getMap());
}
public BitStringGroup(IBitStringList X) throws Exception
{
for(int i=0;i<X.size();i++)
{
IBitString left=X.getBitString(i);
for(int j=0;j<X.size();j++)
{
IBitString right=X.getBitString(j);
BitStringPair bsp=new BitStringPair(left,right);
bsg.put(bsp,null);
}
}
}
public void addRule(IBitString a,IBitString b,IBitString c)
{
BitStringPair bsp=new BitStringPair(a,b);
Set keyset=this.bsg.keySet();
Iterator it=keyset.iterator();
while(it.hasNext())
{
BitStringPair currbsp=(BitStringPair)it.next();
if(bsp.equals(currbsp))
{
this.bsg.remove(currbsp);
this.bsg.put(bsp,c);
break;
}
}
}
public Map getMap()
{
return bsg;
}
public String getName() {
return name;
}
public void setMap(Map s) {
// TODO Auto-generated method stub
}
public void setName(String name) {
this.name = name;
}
public String toString()
{
Iterator it=bsg.keySet().iterator();
String res="{";
while(it.hasNext())
{
BitStringPair curr=(BitStringPair)it.next();
res+="{";
res+=curr.getLeft();
res+=" * ";
res+=curr.getRight();
res+=" = ";
res+=bsg.get(curr);
if(it.hasNext())
res+="},\n";
else
res+="}}\n";
}
return res;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?