Cod sursa(job #2561468)

Utilizator arckerDolteanu Gabriel arcker Data 28 februarie 2020 20:21:18
Problema Copii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <bits/stdc++.h>
using namespace std;

char v[12][12];
int n, g[12], ans;

void check(){
	vector<vector<int> > T(g[n] + 2);
	do{
		int in = 1;
		for(int i = 1; i <= n && in; ++i)
			T[g[i]].push_back(i);
		for(int i = 1; i <= n; ++i){
			int ok = 0;
			for(int j = i + 1; j <= n; ++j){
				for(auto &a: T[i]){
					for(auto &b: T[j]){
						if(v[a][b]){
							ok = 1;
							break;
						}
					}
				}
				if(!ok){
					in = 0;
					break;
				}
			}
		}
		if(in)
			++ans;
	}while(next_permutation(g + 1, g + n + 1));
}

void rec(int i, int k){
	g[i] = k;
	if(i == n){
		check();
		return;
	}
	rec(i + 1, k);
	rec(i + 1, k + 1);
}

int main(){
	ifstream cin("copii.in");
	ofstream cout("copii.out");
	cin >> n;
	for(int i = 1; i <= n; ++i)
		for(int j = 1; j <= n; ++j)
			cin >> v[i][j];
	rec(1, 1);
	cout << ans / 2;
}