diff --git a/dlx.py b/dlx.py --- a/dlx.py +++ b/dlx.py @@ -4,17 +4,30 @@ class Cell: - def __init__(self,left=None,right=None,up=None,down=None,col=None): - self.left=left - self.right=right - self.up=up - self.down=down + def __init__(self,col): + self.left=self + self.right=self + self.up=self + self.down=self self.col=col + def attachRight(self,c): + """...-(b)-(self)-> <-(c)-(d)-...""" + self.right.left=c.left + c.left.right=self.right + self.right=c + c.left=self + + def attachDown(self,c): + self.down.up=c.up + c.up.down=self.down + self.down=c + c.up=self + class Column(Cell): - def __init__(self,name,*args,**kwargs): - super().__init__(*args,up=self,down=self,**kwargs) + def __init__(self,name): + super().__init__(self) self.name=name self.size=0 @@ -48,8 +61,7 @@ class Column(Cell): class Header(Column): def __init__(self): super().__init__("head") - self.left=self - self.right=self + self.up=self.down=self.size=None self._res=[] def search(self,k=0): @@ -63,17 +75,17 @@ class Header(Column): col.cover() row=col.down while row is not col: - row=row.down self._res[k]=row c=row.right while c is not row: c.col.cover() - self.search(k+1) - c=row.right + c=c.right + self.search(k+1) c=row.left while c is not row: c.col.uncover() c=c.left + row=row.down col.uncover() def chooseCol(self): @@ -89,6 +101,7 @@ class Header(Column): def print(self): for r in self._res: + print(r.col.name,end=" ") c=r.right while c is not r: print(c.col.name,end=" ")