A Combinatorial Algorithm for the Semi-Discrete Optimal Transport Problem