Pagini recente » Cod sursa (job #1666267) | Cod sursa (job #88503) | Cod sursa (job #2661131) | Cod sursa (job #2052248) | Cod sursa (job #3230180)
#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;
}