Pagini recente » Cod sursa (job #1941379) | Cod sursa (job #2417475) | Cod sursa (job #1606984) | Cod sursa (job #1918731) | Cod sursa (job #428823)
Cod sursa(job #428823)
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 11;
int i , j , n ;
char s[maxn];
bool A[maxn][maxn] ;
int sr[maxn];
int sol;
bool ok (int nr)
{
bool clean[maxn];
int i , j , k;
for( i = 1 ; i <= nr ; ++i ) {
memset( clean , 0 , sizeof(clean));
for ( j = 1 ; j <= n ; ++j )
if ( sr[j] == i ) {
for( k = 1 ; k <= n ; ++k )
if ( A[j][k] == 1 ) clean[sr[k]] = 1;
}
for( j = 1 ; j <= nr ; ++j )
if ( clean[j] == 0 && i != j ) return false;
}
return true;
}
void back(int p , int nr) {
if ( p == n + 1 ) {
sol += ok(nr);
return ;
}
int i;
for( i = 1 ; i <= nr ; ++i )
sr[p] = i , back ( p + 1 , nr );
back ( p + 1 , nr + 1 );
}
int main()
{
freopen("copii.in","r",stdin);
freopen("copii.out","w",stdout);
scanf("%d\n",&n);
for( i = 1 ; i <= n ; ++i ) {
fgets ( s , maxn , stdin);
for( j = 0 ; s[j] == '1' || s[j] == '0' ; ++j )
A[i][j + 1] = s[j] - '0';
}
back ( 1 , 2 );
printf("%d\n",sol / 2);
return 0;
}