Pagini recente » Cod sursa (job #1541064) | Cod sursa (job #571397) | Cod sursa (job #2779882) | Cod sursa (job #2175292) | Cod sursa (job #972375)
Cod sursa(job #972375)
#include<stdio.h>
#include<iostream>
using namespace std;
int rezults = 0;
char v[12][12];
int sel[12], n;
int ccount[12];
int oameni[12][12];
bool test( int level1, int level2) {
for( int i = 0; i <= ccount[level1] ; ++i)
for( int j = 0; j <= ccount[level2]; ++j)
if( v[ oameni[level1][i] ] [ oameni[level2][j] - 1] == '1')
return 1;
return 0;
}
bool test( int level ){
bool ok = 1;
for( int i = 1; ok && i < level; ++i)
ok *= test(level, i) * test( i, level);
return ok;
}
void back( int level, int count_level, int count, int last ) {
if( level > 2 && count_level == 0 && count == n) {
/*for( int i = 1; i <= n; ++i)
cout<<sel[i]<<" ";
cout<<" "<<level-1<<endl;*/
rezults++;
return ;
}
for( int i = last; i <= n; ++i) {
if( sel[i] == 0 ) {
sel[i] = level;
oameni[level][count_level] = i;
ccount[level] = count_level;
back( level, count_level + 1, count + 1, i + 1);
ccount[level] = count_level - 1;
sel[i] = 0;
if( count_level == 0) return;
}
}
if( count_level) {
ccount[level] = count_level - 1;
if( test( level ) ) {
back( level + 1, 0, count, 2 );
}
}
}
int main() {
freopen("copii.in", "r", stdin);
freopen("copii.out", "w", stdout);
cin>>n;
for( int i = 1; i <= n; ++i)
cin>>v[i];
oameni[1][0] = 1;
sel[1] = 1;
back( 1, 1, 1, 2);
cout<<rezults<<endl;
return 0;
}