Возможно, достаточно жадного алгоритма с рандомизацией для разрыва связей.
Пусть n будет количеством слотов, которое нужно заполнить.
Шаг 1: Прокрутите столбцы, чтобы определить столбцы, у которых меньше всего заполненных слотов. Пропустить уже заполненные столбцы.
Шаг 2: Если ни один из столбцов не определен на шаге 1, больше, чем один, то выберите один из них случайным образом.
Шаг 3: Установите n = n-1
Повторяйте шаги 1, 2 и 3 до тех пор, пока n = 0 или у вас нет пустых столбцов.