Избежать перекрывающихся строк и столбцов сложно в алгоритме genti c. Типичный подход состоит в том, чтобы неявно представлять столбцы индексом в массиве, а затем иметь королевы, представленные числами 1..N.
Таким образом, решение проблемы 8-королевы будет представлено как ( 5 1 8 4 2 7 3 6).
Если вы возьмете любое подмножество массива, вы можете смешать его с другим массивом и быть уверенным, что в каждом столбце (или строке) есть один ферзь, однако вы предпочитаете подумайте об этом).
Вы можете избежать наложения столбцов и строк, используя комбинаторику (так что вместо N ^ N есть N!), но проблема в том, что для этого требуется представление (вы можете по существу используют целые числа для представления полных конфигураций) не работает так же хорошо для операций кроссовера. Вы также столкнетесь с пределом целочисленных представлений. Использование массива, как описано выше, работает довольно хорошо, поэтому я бы предложил сначала изучить этот подход.