Cod sursa(job #3230180)

Utilizator TomaMihaiAlexToma Mihai TomaMihaiAlex Data 19 mai 2024 19:03:23
Problema Problema Damelor Scor 0
Compilator c-64 Status done
Runda Arhiva educationala Marime 1.45 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int valid(int st[], int vf) {
    int diff_col, diff_lin;
    int i;

    for (i = 0; i < vf; i++) {
        diff_lin = vf - i;
        diff_col = abs(st[vf] - st[i]);
        if (st[vf] == st[i] || diff_lin == diff_col) 
            return 0;
    }

    return 1;
}

int solutie(int n, int poz) {
    if (n == poz)
        return 1;

    return 0;
}

void afisare(int n, int st[],int nr,FILE *g) {
    int i;
    if (nr == 0) {
        for (i = 0; i < n; i++)
            fprintf(g,"%d ", st[i]);
        printf("\n");
    }

}

void back(int n, int st[], int vf,int nr,FILE *g) {
    if (solutie(n, vf)) 
    {
        afisare(n, st,nr,g);
        return;
    }

    int i;
    for (i = 0; i < n; i++) {
        st[vf] = i;
        if (valid(st, vf))
            if (solutie(n, vf))
            {
                if (nr == 0) {


                    afisare(n, st,nr,g);
                    nr++;
                    return;
                }
                else
                    nr++;
            }
            else
            back(n, st, vf + 1,nr,g);
    }
}

int main() {
    int n, st[100],nr=0;
    FILE* f = fopen("damesah.in", "r"), *g = fopen("damesah.out", "w");

    if (f == NULL)
    {
        printf("NU S-A PUTUT DESCHIDE FISIERUL");
        exit(0);
    }

    fscanf(f, "%d", &n);

    back(n, st, 0,nr,g);

    return 0;
}