Pagini recente » Cod sursa (job #47411) | Cod sursa (job #908293) | Cod sursa (job #58563) | Cod sursa (job #2975692) | Cod sursa (job #1866773)
#include <cstdio>
FILE *fout = fopen("copii.out", "w");
int v[20], top;
int adiac[11][11];
int blat[11];
inline void baga(int x, int baltagul) {
blat[x] = baltagul;
}
inline int lastbit(int x) {
return x & -x;
}
int kek[(1<<10)];
int n;
int boss[11];
int mor[11][11];
int rez;
void bkt(int stare, int last, int dep) {
if(stare == 0) {
int ramase = dep * (dep - 1);
baga(last, dep);
for(int i = 1; i <= dep; ++i)
boss[i] = dep - 1;
for(int i = 1; i <= dep; ++i)
for(int j = 1; j <= dep; ++j)
mor[i][j] = 0;
for(int i = 0; i < n; ++i)
for(int j = 0; j < n; ++j)
if(blat[i] == blat[j] && mor[blat[i]][blat[j]] == 0) {
ramase--;
mor[blat[i]][blat[j]] = 1;
}
if(ramase == 0)
rez++;
} else {
baga(last, dep);
for(int i = last + 1; i < n; ++i)
if(stare & (1 << i))
bkt(stare ^ (1 << i), i, dep);
bkt(stare ^ lastbit(stare), kek[lastbit(stare)], dep + 1);
}
}
int main() {
char ch;
for(int i = 0; i < 10; ++i)
kek[1 << i] = i;
FILE *fin = fopen("copii.in", "r");
fscanf(fin, "%d", &n);
for(int i = 0; i < n; ++i) {
ch = fgetc(fin);
while(ch == ' ' || ch == '\n')
ch = fgetc(fin);
for(int j = 0; j < n; ++j) {
adiac[i][j] = ch;
ch = fgetc(fin);
}
}
bkt((1 << n) - 2, 0, 1);
fprintf(fout, "%d", rez);
fclose(fin);
fclose(fout);
return 0;
}