Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Node():
- def __init__(self, col, row):
- self.col = col
- self.row = row
- self.up, self.down, self.left, self.right = self, self, self, self
- class ColumnNode(Node):
- def __init__(self, id):
- Node.__init__(self, self, id)
- self.row_cnt = 0
- class DLX():
- def search(h: ColumnNode, k:int, s:list):
- if h.right == h:
- print_solution(s)
- return
- else:
- c = choose_column_object(h)
- r = c.down
- while r != c:
- s += [r]
- j = r.right
- while j != r:
- cover(j.col)
- j = r.right
- search(h, k+1, s)
- # Pop data object
- r = s.pop()
- c = r
- j = r.left
- while j != r:
- uncover(j.col)
- j = j.left
- r = r.down
- uncover(c)
- def cover(c):
- c.right.left = c.left
- c.left.right = c.right
- i = c.down
- while i != c:
- j = i.right
- while j != i:
- j.down.up = j.up
- j.up.down = j.down
- j.col.row_cnt -= 1
- j = j.right
- i = i.down
- def uncover(c):
- i = c.up
- while i != c:
- j = i.left
- while j != i:
- j.col.row_cnt -= 1
- j.down.up = j
- j.up.down = j
- j = j.left
- i = i.up
- c.right.left = c
- c.left.right = c
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement