Pagini recente » Cod sursa (job #426788) | Cod sursa (job #2527064) | Cod sursa (job #1264215) | Cod sursa (job #492694) | Cod sursa (job #1866802)
# include <iostream>
# include <fstream>
# include <vector>
using namespace std;
ifstream fin( "copii.in" );
ofstream fout( "copii.out" );
typedef vector<int> mult;
vector<mult> t;
const int MAX_N = 10;
int n, k = 0, ix[MAX_N];
bool f[MAX_N][MAX_N];
bool check( void ) {
if ( t.size() == 1 )
return 0;
for ( int i = 0; i < t.size(); i ++ ) {
int d = ( 1 << i );
for ( int j : t[i] ) {
for ( int k = 0; k < n; k ++ )
if ( f[j][k] )
d |= ( 1 << ix[k] );
}
if ( d != ( 1 << t.size() ) - 1 )
return 0;
}
return 1;
}
void bkt( int p = 0 ) {
if ( p == n ) {
k += check();
} else {
for ( int i = 0; i < t.size(); i ++ ) {
ix[p] = i;
t[i].push_back( p );
bkt( p + 1 );
t[i].pop_back();
}
ix[p] = t.size();
t.push_back( vector<int>( 1, p ) );
bkt( p + 1 );
t.pop_back();
}
}
int main() {
fin >> n;
for ( int i = 0; i < n; i ++ )
for ( int j = 0; j < n; j ++ ) {
char ch;
fin >> ch;
f[i][j] = ( ch == '1' );
cout << (int)f[i][j] << ' ';
}
bkt();
fout << k;
return 0;
}