Computer >> Máy Tính >  >> Lập trình >> Python

Chương trình điền cây trò chơi Min-max bằng Python

Giả sử chúng ta có một cây nhị phân biểu diễn trạng thái trò chơi của trò chơi hai người chơi. Mọi nút bên trong được điền bằng 0 và các giá trị của lá biểu thị điểm kết thúc. Người chơi 1 muốn tối đa hóa điểm số cuối cùng trong khi người chơi 2 muốn giảm thiểu điểm số cuối cùng. Người chơi 1 sẽ luôn di chuyển trên các nút ở cấp độ chẵn và người chơi 2 sẽ luôn thực hiện di chuyển ở cấp độ lẻ. Chúng ta phải điền vào cây nhị phân với kết quả điểm giả sử cả hai người chơi đều chơi tối ưu.

Vì vậy, nếu đầu vào giống như

Chương trình điền cây trò chơi Min-max bằng Python

thì đầu ra sẽ là

Chương trình điền cây trò chơi Min-max bằng Python

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một hàm trợ giúp (). Điều này sẽ có gốc, h, currentHeight
  • nếu gốc trống, thì
    • trở lại
  • trình trợ giúp (bên trái của thư mục gốc, h, currentHeight + 1)
  • trình trợ giúp (quyền root, h, currentHeight + 1)
  • if currentHeight
  • nếu currentHeight là chẵn thì
    • nếu bên trái của thư mục gốc và bên phải của thư mục gốc không rỗng, thì
      • giá trị của gốc:=giá trị lớn nhất của bên trái của gốc, giá trị của bên phải của gốc
    • ngược lại, khi bên trái của thư mục gốc không rỗng, thì
      • giá trị của gốc:=giá trị của bên trái của gốc
    • ngược lại khi bên phải của thư mục gốc không rỗng, thì
      • value of root:=giá trị của quyền root
  • nếu không,
    • nếu bên trái của thư mục gốc và bên phải của thư mục gốc không rỗng, thì
      • giá trị của gốc:=giá trị nhỏ nhất của giá trị bên trái của gốc, giá trị của bên phải của gốc
    • ngược lại, khi bên trái của thư mục gốc không rỗng, thì
      • giá trị của gốc:=giá trị của bên trái của gốc
    • ngược lại khi bên phải của thư mục gốc không rỗng, thì
      • value of root:=giá trị của quyền root
  • Xác định chiều cao của hàm (). Điều này sẽ bén rễ
  • nếu gốc là null, thì
    • trả về 0
  • trả về 1 + (tối đa chiều cao (bên trái thư mục gốc), chiều cao (bên phải thư mục gốc))
  • Từ phương pháp chính, hãy thực hiện như sau -
  • h:=height (root)
  • trình trợ giúp (root, h, 0)
  • trả về thư mục gốc
  • Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

    Ví dụ

    class TreeNode:
       def __init__(self, data, left = None, right = None):
          self.val = data
          self.left = left
          self.right = right
    class Solution:
       def helper(self, root, h, currentHeight):
          if not root:
             return
             self.helper(root.left, h, currentHeight + 1)
             self.helper(root.right, h, currentHeight + 1)
             if currentHeight < h:
                if currentHeight % 2 == 0:
                   if root.left and root.right:
                      root.val = max(root.left.val, root.right.val)
                   elif root.left:
                      root.val = root.left.val
                   elif root.right:
                      root.val = root.right.val
                   else:
                      if root.left and root.right:
                         root.val = min(root.left.val, root.right.val)
                      elif root.left:
                         root.val = root.left.val
                      elif root.right:
                         root.val = root.right.val
       def height(self, root):
          if not root:
             return 0
             return 1 + max(self.height(root.left), self.height(root.right))
       def solve(self, root):
             h = self.height(root)
             self.helper(root, h, 0)
             return root
       def print_tree(root):
          if root is not None:
             print_tree(root.left)
             print(root.val, end = ', ')
          print_tree(root.right)
    ob = Solution()
    root = TreeNode(0)
    root.left = TreeNode(3)
    root.right = TreeNode(0)
    root.right.left = TreeNode(0)
    root.right.right = TreeNode(0)
    root.right.left.left = TreeNode(-3)
    root.right.right.right = TreeNode(4)
    print_tree(ob.solve(root))

    Đầu vào

    root = TreeNode(0)
    root.left = TreeNode(3)
    root.right = TreeNode(0)
    root.right.left = TreeNode(0)
    root.right.right = TreeNode(0)
    root.right.left.left = TreeNode(-3)
    root.right.right.right = TreeNode(4)

    Đầu ra

    3, 3, -3, -3, -3, 4, 4,