Pagini recente » Cod sursa (job #654571) | Cod sursa (job #2385121) | Cod sursa (job #167121) | Cod sursa (job #716028) | Cod sursa (job #1703098)
#include <cstdio>
using namespace std;
int ans=0, i,j,n,
friends[12], /// prietenii copilului i
f[12], /// prietenii echipei i
a[12]; /// membrii echipei i
char S[12];
inline bool verif(int teams)
{
for(int i=0; i<teams; ++i)
for(int j=i+1; j<teams; ++j)
if( !(a[i] & f[j]) || !(f[i] & a[j]) ) return 0;
return 1;
}
void bakcool(int p, int teams)
{
int i;
if(p==n)
{
ans += verif(teams);
return;
}
for(i=0; i<teams; ++i)
{
int before=f[i];
a[i] += (1<<p);
f[i]|=friends[p];
bakcool( p+1, teams);
a[i] -= (1<<p);
f[i] = before;
}
f[teams] = friends[p];
a[teams] = (1<<p);
bakcool(p+1, teams+1);
}
int main()
{
freopen("copii.in", "r", stdin);
freopen("copii.out", "w", stdout);
scanf("%d\n", &n);
for(i=0; i<n; ++i)
{
gets(S);
for(j=0; j<n; ++j)
friends[i] += (S[j]=='1')*(1<<j);
}
bakcool(0,0);
printf("%d\n", ans-1);
return 0;
}