Mini-Max Algorithm

To find the optimal move for a player, assuming that the opponent is also playing optimally.