Cod sursa(job #1355993)

Utilizator alexandra_udristoiuUdristoiu Alexandra Maria alexandra_udristoiu Data 23 februarie 2015 09:07:45
Problema Copii Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<fstream>
using namespace std;
int n, i, j, sol, nr;
char a[13][13];
int g[13][13], f[13], v[13];
ifstream fin("copii.in");
ofstream fout("copii.out");
int verif(){
	if(nr < 2){
		return 0;
	}
	for(int i = 1; i <= nr; i++){
		for(int j = 1; j <= g[i][0]; j++){
			for(int k = 1; k <= n; k++){
				if(a[g[i][j]][k] == 1){
					v[f[k]] = i;
				}
			}
		}
		for(int j = 1; j <= nr; j++){
			if(v[j] != i && i != j){
				return 0;
			}
		}
	}
	return 1;
}
void back(int k){
	if(k == n + 1){
		if(verif()){
			sol++;
		}
	}
	else{
		for(int i = 1; i <= nr; i++){
			g[i][++g[i][0]] = k;
			f[k] = i;
			back(k + 1);
			f[k] = 0;
			g[i][0]--;
		}
		nr++;
		g[nr][0] = 1;
		g[nr][1] = k;
		f[k] = nr;
		back(k + 1);
		f[k] = 0;
		g[nr][0] = 0;
		nr--;
	}
}
int main(){
	fin>> n;
	for(i = 1; i <= n; i++){
		for(j = 1; j <= n; j++){
			fin>> a[i][j];
			a[i][j] -= '0';
		}
	}
	back(1);
	fout<< sol <<"\n";
	return 0;
}