Pagini recente » Cod sursa (job #2693311) | Cod sursa (job #2693057) | Cod sursa (job #2227823) | Borderou de evaluare (job #465087) | Cod sursa (job #614171)
Cod sursa(job #614171)
#include<cstdio>
const int NMAX = 12 ;
bool a[NMAX][NMAX];
bool b[NMAX][NMAX];
int n ;
int st[NMAX];
int NRSOL = 0 ;
void update_mat ( int copil , int mult )
{
for ( int i = 1 ; i <= n ; ++ i )
b[mult][st[i]] = b[mult][st[i]] || a[copil][i] ;
}
void verif ( int m ) //fake afisare
{
int i , j ;
if ( m == 1 )
return ;
/*for ( i = 1 ; i <= n ; ++ i )
printf ( "%d ", st[i] ) ;
printf ( "\n" ) ;*/
//fake afisare no more
for ( i = 1 ; i <= m ; ++ i )
for ( j = 1 ; j <= m ; ++ j )
b[i][j] = 0 ;
for ( int i = 1 ; i <= n ; ++ i )
{
update_mat ( i , st[i] ) ;
}
for ( i = 1 ; i <= m ; ++ i )
for ( j = 1 ; j <= m ; ++ j )
if ( !b[i][j] && i != j )
return ;
/*printf ( "%d---\n" , m );
for ( int i = 1 ; i <= m ; ++ i )
{
for ( int j = 1 ; j <= m ; ++ j )
printf ( "%d " , b[i][j] ) ;
printf ( "\n" ) ;
}
printf ( "\n\n" );*/
++NRSOL;
}
void bkt ( int k , int m )
{
if ( k - 1 == n )
{
verif ( m );
return ;
}
//printf ( "bkt - %d %d\n" , k , m ) ;
for ( int i = 1 ; i <= m ; ++ i )
{
st[k] = i ;
bkt ( k + 1 , m ) ;
}
st[k]=m+1 ;
bkt ( k + 1 , m + 1 ) ;
}
int main ( )
{
freopen ( "copii.in" , "r", stdin ) ;
freopen ( "copii.out" , "w" , stdout ) ;
int i , j ;
char s_current[NMAX];
scanf ( "%d " , & n ) ;
//printf ( "%d ", n ) ;
for ( i = 1 ; i <= n ; ++ i )
{
gets ( s_current ) ;
for ( j = 0 ; s_current[j] ; ++ j )
if ( s_current[j] == '1' )
a[i][j+1]=true ;
//printf ( "%s " , s_current ) ;
}
bkt ( 1 , 0 ) ;
printf ( "%d" , NRSOL ) ;
return 0 ;
}