Pagini recente » Cod sursa (job #2769599) | Cod sursa (job #339586) | Istoria paginii runda/porc2/clasament | Rating Mihai Vasile (mihaivasile) | Cod sursa (job #422088)
Cod sursa(job #422088)
#include <algorithm>
#include <vector>
using namespace std;
#define pb push_back
#define PB pop_back
#define DIM 15
vector <int> grup[DIM];
int v[DIM],viz[DIM];
char a[DIM][DIM];
int n,nrt;
void read ()
{
int i;
scanf ("%d\n",&n);
for (i=1; i<=n; ++i)
fgets (a[i]+1,DIM,stdin);
}
inline int check (int nr)
{
vector <int> :: iterator it;
int i,j;
if (nr<2)
return 0;
memset (viz,0,sizeof (viz));
for (i=1; i<=nr; ++i)
{
for (it=grup[i].begin (); it!=grup[i].end (); ++it)
for (j=1; j<=n; ++j)
if (a[*it][j]=='1')
viz[v[j]]=i;
for (j=1; j<=nr; ++j)
if (i!=viz[j] && i!=j)
return 0;
}
return 1;
}
void back (int k,int nr)
{
int i;
if (k==n+1)
nrt+=check (nr);
else
{
for (i=1; i<=nr; ++i)
{
grup[i].pb (k);
v[k]=i;
back (k+1,nr);
grup[i].PB ();
}
grup[nr+1].pb (k);
v[k]=nr+1;
back (k+1,nr+1);
grup[nr+1].PB ();
}
}
int main ()
{
freopen ("copii.in","r",stdin);
freopen ("copii.out","w",stdout);
read ();
back (1,0);
printf ("%d",nrt);
return 0;
}