Pagini recente » Cod sursa (job #2777082) | Cod sursa (job #895813) | Cod sursa (job #166910) | Cod sursa (job #2721677) | Cod sursa (job #2626913)
#include <stdio.h>
int result[5000][5000];
int n = 13;
int solutie[13];
int nrsol = 0;
void bk(int k);
int check(int k);
int abs(int x) {
return x < 0 ? x*-1 : x;
}
void bk(int k) {
int i, p, l, m, repeat;
for(i=0; i<n*n; i++) {
solutie[k] = i;
if(k+1 == n) {
if(check(k)) {
for(p=0; p<nrsol; p++) {
repeat = 0;
for(l=0; l<n; l++) {
for(m=0; m<n; m++) {
if(solutie[m] == result[p][l]) repeat ++;
}
}
if(repeat == n) goto brk;
}
brk:
if(repeat < n) {
for(p=0; p<n; p++) result[nrsol][p] = solutie[p];
nrsol++;
printf("S-a gasit solutia %d\n", nrsol);
}
}
}
else {
bk(k+1);
}
}
}
int check(int k) {
int linek, colk, poz, linei, coli;
poz = solutie[k];
linek = 0;
colk = 0;
while(poz >= n) {
poz -= n;
linek++;
}
colk = poz;
for(int i = 0; i <= k-1; i++) {
poz = solutie[i];
linei = 0;
coli = 0;
while(poz >= n) {
poz -= n;
linei++;
}
coli = poz;
if((abs(linek-linei) == abs(colk-coli)) || linek == linei || colk == coli || solutie[k] == solutie[i]) {
return 0;
}
}
return 1;
}
int main() {
int i, k;
bk(0);
// for(i = 0; i<nrsol; i++) {
// for(k = 0; k<n; k++) printf("%d ", result[i][k]);
//
// printf("\n");
// }
// printf("%d", nrsol);
return 0;
}