Cod sursa(job #421609)

Utilizator elmercerAlex Mercer elmercer Data 21 martie 2010 14:50:42
Problema Copii Scor 0
Compilator cpp Status done
Runda Algoritmiada 2010, Runda 4, Clasele 9-10 Marime 1.06 kb
#include <stdio.h>
#include <string.h>

long i, j, k, n, p, ok, v[15], vb1, sol, a[15][15], r[15][15];
char ch;

void back(long lev, long max) {
	if (lev == n + 1) {
		++p;
		memset(r, 0, sizeof(r));
		/*for (j = 1; j <= n; ++j) {
			printf("%ld ", v[j]);
		}*/
		if (p > 1) {
			for (j = 1; j <= n; ++j) {
				for (k = 1; k <= n; ++k) {
					if (a[j][k] == 1) {
						r[v[j]][v[k]] = 1;
					}
				}
			}
			vb1 = 0;
			for (j = 1; j <= max; ++j) {
				for (k = 1; k <= max; ++k) {
					if (j != k) {
						if (r[j][k] != 1) vb1 = 1;
					}
				}
			}
			if (vb1 == 0) {
				++sol;
			}
		}
		//printf("\n");
		return;
	}
	
	for (long i = 1; i <= max + 1; ++i) {
		v[lev] = i;
		//if (max < v[lev]) max = v[lev];
		back(lev + 1, i);
	}
}

int main() {
	freopen("copii.in", "r", stdin);
	freopen("copii.out", "w", stdout);
	scanf("%ld\n", &n);
	for (i = 1; i <= n; ++i) {
		for (j = 1; j <= n; ++j) {
			scanf("%c", &ch);
			a[i][j] = (long)(ch - '0');
		}
		scanf("%c", &ch);
	}
	back(1, 0);
	printf("%ld\n", sol);
	return 0;
}