Pagini recente » Cod sursa (job #1613257) | Istoria paginii runda/info_cnmv | Cod sursa (job #1527241) | Cod sursa (job #141311) | Cod sursa (job #1511478)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("copii.in");
ofstream out("copii.out");
int n,sol[12], nr;
char a[12][12];
bool pri[12][12];
void verifica( int subm )
{
if ( subm < 2 )
return;
for ( int i = 1; i <= n; i++ )
{
for ( int j = 1; j <= n; j++ )
{
if ( i == j )
j++;
if ( a[i][j] == '1' )
{
pri[ sol[i] ][ sol[j] ] = true;
}
}
}
for ( int i = 1; i <= subm; i++ )
{
for ( int j = 1; j <= subm; j++ )
{
if ( pri[i][j] == false && i != j )
return;
}
}
nr++;
for ( int i = 1; i <= n; i++ )
for ( int j = 1; j <= n; j++ )
pri[i][j] = false;
}
void bkt( int p, int subm )
{
if ( p == n+1 )
verifica(subm);
else
{
for ( int i = 1; i <= n && i <= sol[p-1]+1; i++ )
{
if ( subm < i )
subm = i;
sol[p] = i;
bkt(p+1, subm );
}
}
}
int main()
{
in >> n;
for ( int i = 1; i <= n; i++ )
in >> a[i]+1;
sol[1] = 1;
bkt(2, 0);
out << nr;
return 0;
}