fork download
  1. class Node:
  2. def __init__(self, name, children, value=None):
  3. self.name = name
  4. self.children = children
  5. self.value = value
  6.  
  7.  
  8. t1 = Node('t1', [], 3)
  9. t2 = Node('t2', [], 5)
  10. t3 = Node('t3', [], 6)
  11. t4 = Node('t4', [], 9)
  12.  
  13.  
  14. B = Node('B', [t1, t2])
  15. C = Node('C', [t3, t4])
  16.  
  17.  
  18. A = Node('A', [B, C])
  19.  
  20.  
  21. def minimax(node, is_maximizing):
  22. if not node.children:
  23. return node.value
  24.  
  25. if is_maximizing:
  26. max_value = float('-inf')
  27. for child in node.children:
  28. value = minimax(child, False)
  29. max_value = max(max_value, value)
  30. node.value = max_value
  31. return max_value
  32. else:
  33. min_value = float('inf')
  34. for child in node.children:
  35. value = minimax(child, True)
  36. min_value = min(min_value, value)
  37. node.value = min_value
  38. return min_value
  39.  
  40.  
  41. result = minimax(A, True)
  42.  
  43.  
  44. def print_tree(node):
  45. print(f"{node.name}: {node.value}")
  46. for child in node.children:
  47. print_tree(child)
  48.  
  49. print_tree(A)
  50. print("\nBest value from root (A):", result)
  51.  
Success #stdin #stdout 0.08s 14092KB
stdin
Standard input is empty
stdout
A: 6
B: 3
t1: 3
t2: 5
C: 6
t3: 6
t4: 9

Best value from root (A): 6