Cod sursa(job #1527895)

Utilizator pitbull007Hurmuzache Ciprian pitbull007 Data 18 noiembrie 2015 20:17:54
Problema Problema Damelor Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 1.14 kb
#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;
}