Pagini recente » Cod sursa (job #2452766) | Cod sursa (job #1837346) | Cod sursa (job #1549744) | Monitorul de evaluare | Cod sursa (job #1930456)
#include <cstdio>
#include <vector>
using namespace std;
typedef vector<int> mult;
vector<mult> t;
int n, rez, v[10];
bool f[10][10];
bool check( void )
{
int i, x, l;
if( t.size()==1 )
return 0;
for( i=0;i<t.size();i++ )
{
x=(1<<i);
for( int j:t[i] )
{
for( l=0;l<n;l++ )
if( f[j][l] )
x|=(1<<v[l]);
}
if( x!=(1<<t.size())-1 )
return 0;
}
return 1;
}
void bkt( int p )
{
int i;
p=0;
if( p==n )
rez+=check();
else
{
for( i=0;i<t.size();i++ )
{
v[p]=i;
t[i].push_back(p);
bkt(p+1);
t[i].pop_back();
}
v[p]=t.size();
t.push_back(vector<int>(1,p));
bkt(p+1);
t.pop_back();
}
}
int main()
{
freopen( "copii.in", "r", stdin );
freopen( "copii.out", "w", stdout );
int i, j;
char c;
scanf( "%d", n );
for( i=0;i<n;i++ )
{
scanf( "\n" );
for( j=0;j<n;j++ )
{
scanf( "%c", &c );
f[i][j]=c-'0';
}
}
bkt();
printf( "%d", rez );
return 0;
}