'Find a noncovered zero and prime it. If there is no starred zero
in the row containing this primed zero, Go to Step 5. Otherwise,
cover this row and uncover the column containing the starred
zero. Continue in this manner until there are no uncovered zeros
left. Save the smallest uncovered value and Go to Step 6.'

def __step4(self):

    step = 0
    done = False
    row = (-1)
    col = (-1)
    star_col = (-1)
    while (not done):
        (row, col) = self.__find_a_zero()
        if (row < 0):
            done = True
            step = 6
        else:
            self.marked[row][col] = 2
            star_col = self.__find_star_in_row(row)
            if (star_col >= 0):
                col = star_col
                self.row_covered[row] = True
                self.col_covered[col] = False
            else:
                done = True
                self.Z0_r = row
                self.Z0_c = col
                step = 5
    return step
