Pagini recente » Cod sursa (job #889609) | Cod sursa (job #292994) | Cod sursa (job #132639) | Cod sursa (job #1163202) | Cod sursa (job #1994234)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("copii.in");
ofstream g("copii.out");
typedef vector<int> mult;
vector<mult> t;
int n, k = 0, ix[10];
bool v[10][10];
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(v[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()
{
f>>n;
for(int i=0; i<n; i++)
for(int j=0; j<n; j++)
{
char ch;
f>>ch;
v[i][j]=(ch=='1');
}
bkt();
g<<k;
return 0;
}