Pagini recente » Cod sursa (job #536326) | Cod sursa (job #219053) | Cod sursa (job #2697243) | Cod sursa (job #1396517) | Cod sursa (job #961361)
Cod sursa(job #961361)
#include <cstdio>
#include <cstdlib>
#include <algorithm>
using namespace std;
int N, X[12], Ans;
bool Mat[12][12], A[12][12];
char S[12];
bool Check(int Groups)
{
int i, j;
for(i = 1; i <= Groups; ++ i)
for(j = 1; j <= Groups; ++ j)
A[i][j] = 0;
for(i = 1; i <= N; ++ i)
for(j = 1; j <= N; ++ j)
if(Mat[i][j])
A[ X[i] ][ X[j] ] = 1;
for(i = 1; i <= Groups; ++ i)
for(j = 1; j <= Groups; ++ j)
if(!A[i][j] && i != j)
return 0;
return 1;
}
void Back(int Pos, int Gr)
{
if(Pos == N + 1)
{
Ans += Check(Gr);
return ;
}
int i = 1;
while(i <= Gr)
X[Pos] = i, Back(Pos + 1, Gr), i ++;
X[Pos] = Gr + 1;
Back(Pos + 1, Gr + 1);
}
int main()
{
freopen("copii.in", "r", stdin);
freopen("copii.out", "w", stdout);
scanf("%i\n", &N);
for(int i = 1; i <= N; ++ i)
{
gets(S + 1);
for(int j = 1; j <= N; ++ j)
Mat[i][j] = S[j] - '0';
}
Back(1, 0);
printf("%i\n", Ans - 1);
return 0;
}