Pagini recente » Clasament preONI 2007, Clasele 11-12 | Cod sursa (job #66155) | Cod sursa (job #996153) | Cod sursa (job #1658561) | Cod sursa (job #1527895)
#include <stdio.h>
#include <stdlib.h>
#define MAX_DAME 14
FILE *fin, *fout;
int dame[MAX_DAME], N, totalSolutii;
int col[MAX_DAME], diag_princ[MAX_DAME * 2], diag_sec[MAX_DAME * 2];
void backtrack(int l, int n) { //linia l, n coloane
if(l == n) { //nr de linii egal cu numar de coloane
if(totalSolutii < 1) {
int c;
for(c=0;c<N;c++) {
fprintf(fout,"%d ",dame[c]+1);
}
fprintf(fout,"\n");
}
totalSolutii++;
} else {
//verifica daca se poate pune o dama pe col,diag_princ, diag_sec
int c;
for(c=0;c<N;c++) {
if(!col[c] && !diag_princ[c-l + n-1] && !diag_sec[l+c]) {
dame[l] = c;
col[c] = diag_princ[c-l + n-1] = diag_sec[l+c] = 1;
backtrack(l+1,n);
col[c] = diag_princ[c-l + n-1] = diag_sec[l+c] = 0;
}
}
}
}
int main(void) {
fin = fopen("damesah.in","r");
fout = fopen("damesah.out","w");
fscanf(fin,"%d",&N);
fclose(fin);
backtrack(0,N);
fprintf(fout,"%d\n",totalSolutii);
fclose(fout);
return 0;
}