Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
120
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.61 KB | None | 0 0
  1. class Node():
  2.     def __init__(self, col, row):
  3.         self.col = col
  4.         self.row = row
  5.         self.up, self.down, self.left, self.right = self, self, self, self
  6.  
  7.  
  8. class ColumnNode(Node):
  9.     def __init__(self, id):
  10.         Node.__init__(self, self, id)
  11.         self.row_cnt = 0
  12.  
  13.  
  14. class DLX():
  15.     def search(h: ColumnNode, k:int, s:list):
  16.         if h.right == h:
  17.             print_solution(s)
  18.             return
  19.         else:
  20.             c = choose_column_object(h)
  21.             r = c.down
  22.             while r != c:
  23.                 s += [r]
  24.                 j = r.right
  25.                 while j != r:
  26.                     cover(j.col)
  27.                     j = r.right
  28.                 search(h, k+1, s)
  29.                 # Pop data object
  30.                 r = s.pop()
  31.                 c = r
  32.                 j = r.left
  33.                 while j != r:
  34.                     uncover(j.col)
  35.                     j = j.left
  36.                 r = r.down
  37.         uncover(c)
  38.  
  39.     def cover(c):
  40.         c.right.left = c.left
  41.         c.left.right = c.right
  42.         i = c.down
  43.         while i != c:
  44.             j = i.right
  45.             while j != i:
  46.                 j.down.up = j.up
  47.                 j.up.down = j.down
  48.                 j.col.row_cnt -= 1
  49.                 j = j.right
  50.             i = i.down
  51.  
  52.     def uncover(c):
  53.         i = c.up
  54.         while i != c:
  55.             j = i.left
  56.             while j != i:
  57.                 j.col.row_cnt -= 1
  58.                 j.down.up = j
  59.                 j.up.down = j
  60.                 j = j.left
  61.             i = i.up
  62.         c.right.left = c
  63.         c.left.right = c
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement