Pagini recente » Cod sursa (job #1207827) | Cod sursa (job #1775385) | Cod sursa (job #2070981) | Cod sursa (job #1477993) | Cod sursa (job #428826)
Cod sursa(job #428826)
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn = 15;
int i , j , n ;
char s[maxn];
bool A[maxn][maxn] ;
bool f[maxn][maxn];
int sr[maxn];
int sol;
bool ok (int nr)
{
memset ( f , 0 , sizeof(f));
int i , j;
for( i = 1 ; i <= n ; ++i )
for( j = 1 ; j <= n ; ++j )
if ( A[i][j] == 1 )
f[sr[i]][sr[j]] = 1;
for( i = 1 ; i <= nr ; ++i)
for( j = 1 ; j <= nr ; ++j )
if ( i != j && f[i][j] == 0 ) return false;
return true;
}
void back(int p , int nr) {
if ( p == n + 1 ) {
if ( nr > 1 )
sol += ok(nr);
return ;
}
int i;
for( i = 1 ; i <= nr ; ++i )
sr[p] = i , back ( p + 1 , nr );
sr[p] = nr + 1;
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 , 0 );
printf("%d\n",sol);
return 0;
}