Neste puzzle clássico você deverá dispor 8 rainhas no tabuleiro de modo que nenhuma fique sob "ataque" de outra. Há um total de 92 soluções possíveis e 12 distintas(descontadas as soluções simétricas de rotação e reflexão).
#include <stdio.h> //biblioteca standard input/output #include <stdlib.h> //biblioteca standard int x[8]; // inicia um vector de inteiros chamado x com 8 pisições // imprime o tabuleiro/ void print () { int i,j;//inicia as variaveis i e j (vertical e horizontal) printf ("#----------------#n"); //imprime o topo for (i=0; i<8; i++) { printf ("$"); //imprime a lateral do tabuleiro for (j=0; j<8; j++) //ciclo de impressão das 8 rainhas if (j==x[i]) printf ("[]"); //caso j seja igual a x[i] imprime rainha else printf (" "); //caso contrario imprime espaço printf ("$n"); //muda de linha }//sai so ciclo de impressão das laterais do tabuleiro e rainhas printf ("#----------------#nn"); //imprime o fundo do tabuleiro getchar(); //aguarda enter } int Blivre (int ix, int iy)//incia a função (Blivre) com duas variaveis do tipo int ix e iy e verifica se (ix, iy) é comivel por rainhas segundo as regras de xadrex 0 a (iy-1) //esta função é chamada de forma recursiva na impressão do tabuleiro { int i; //inicia a variavel i for (i=0; i<iy; i++) //inicia o ciclo de calculo de posição aleatória para as rainhas if ((x[i]==ix) || (abs(x[i]-ix)==abs(i-iy))) return 0; // (caso x[i) não (absotulo de (x[i]-ix)==absoluto(i-iy) devolve o valor zero para impressão de rainha return 1; //caso contrario devolve o valor 1 para impressão da rainha } /* coloca a rainha n na linha n n */ void coloca (int n) //colca rainha { int i; //inicia vaiavel i int h; //inicia variavel h if (n==8) print(); // se o valor de n for equivalente a 8 chama a funcão (print) para desenhar o tabuleiro e as rainhas (de forma recursiva) else //caso contrario for (i=0; i<8; i++) // inicia o ciclo e chama a função Blivre (i,n) para confirmar se é possivel imprimir a rainha de acordo com as regras if (Blivre(i,n)) //chama a função de validação de possibilidade de imprimir a rainha e passa-lhe as variaveis (i,n) { x[n]=i; //x de n assume o valor de i coloca (n+1); //imprime uma rainha na posição n+1 } } int main () //funcao main ou principal { coloca(0); //imprime a primeira solução possivel getchar(); //aguarda enter return 0; //Retorna zero }