Pagini recente » Cod sursa (job #626856) | Cod sursa (job #1454766) | Cod sursa (job #1682652) | Cod sursa (job #342945) | Cod sursa (job #972368)
Cod sursa(job #972368)
#include<stdio.h>
#include<iostream>
using namespace std;
int rezults = 0;
char v[12][12];
int sel[12], n;
int count[12];
int oameni[12][12];
bool test( int level1, int level2) {
for( int i = 1; i <= n; ++i)
for( int j = 1; j <= n; ++j)
if( sel[i] == level1 && sel[j] == level2 && v[i][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 ) {
if( level > 2 && count_level == 0 && count == n) {
rezults++;
return ;
}
for( int i = 2; i <= n; ++i) {
if( sel[i] == 0 ) {
sel[i] = level;
//oameni[level][count_level] = i;
//count[level] = count_level;
back( level, count_level + 1, count + 1);
sel[i] = 0;
if( count_level == 0) return;
}
}
if( count_level) {
if( test( level ) )
back( level + 1, 0, count );
}
}
int main() {
freopen("copii.in", "r", stdin);
//freopen("copii.out", "w", stdout);
cin>>n;
for( int i = 1; i <= n; ++i)
cin>>v[i];
sel[1] = 1;
back( 1, 1, 1);
cout<<rezults<<endl;
return 0;
}