Agregando a las otras respuestas: crear una matriz bidimensional solo complica el código.
Solo necesita un vector de tamaño 8 para un tablero de ajedrez normal. O 8 + 1 si, como C, la primera posición es 0, solo para simplificar el código, y tratar con 1-8 y no con 0-7.
Si piensa que x es su posición en la matriz, yy es el contenido de la posición. Por ejemplo, el tablero [1] = 8 significa que la primera reina está en [1,8].
De esa manera, solo necesita verificar la validación de las columnas.
En la facultad, me encontré con un libro muy antiguo (¿60?), Sobre algoritmos implementados en Dartmouth BASIC, que implementaba el problema de las 8 reinas usando la menor memoria posible (siendo tan viejo, tiene sentido).
Hasta donde recuerdo, usó la idea del vector, y esencialmente bruto forzó todas las posiciones en el tablero con dos ciclos FOR. Para verificar la validez de la posición, usó un tercer ciclo, un ciclo MIENTRAS en cada posición retrocede en el vector, y busca un número igual, o una fórmula que usa una operación tangente para verificar las diagonales.
Lamentablemente, perdí el rastro de ese libro ...
Dicho algoritmo encontró todas las soluciones para el problema de n-queen.