Pagini recente » Cod sursa (job #1081301) | Cod sursa (job #3263579) | Cod sursa (job #2657442) | Cod sursa (job #3166208) | Cod sursa (job #3270638)
#include <bits/stdc++.h>
#define int long long
using namespace std;
ifstream fin("copii.in");
ofstream fout("copii.out");
int n,sol=0,team;
int echipe[13],frecv[13];
string s;
vector<int> a[13],v[13];
bool verif()
{
int i,it;
for(i=1;i<=n;++i)
{
v[i].clear();
frecv[i]=0;
}
for(i=1;i<=n;++i)
{
v[echipe[i]].push_back(i);
}
/*
for(i=1;i<=team;++i)
{
cout<<"echipa "<<i<<" are membrii ";
for(auto j:v[i])
cout<<j<<' ';
cout<<'\n';
}*/
for(i=1;i<=team;++i)///forul prin echipe
{
for(it=1;it<=n;++it)
{
frecv[it]=0;
}
for(auto j:v[i])///forul prim membrii echipei
{
for(auto l:a[j])///forul prin prieteni
{
frecv[echipe[l]]++;
}
}
for(it=1;it<=team;++it)
{
//cout<<it<<' '<<frecv[it]<<'\n';
if(frecv[it]==0 && it!=i)
{
return false;
}
}
}
//cout<<"\n\n\n";
return true;
}
void backtr(int k)
{
int ech;
if(k==n+1)
{
if(verif())
++sol;
return;
}
int i;
for(i=1;i<=team+1;++i)
{
echipe[k]=i;
ech=team;
if(i==team+1)
{
++team;
i++;
}
//cout<<"copilul nr "<<k<<" e in echipa "<<echipe[k]<<'\n';
backtr(k+1);
team=ech;
echipe[k]=0;
}
}
signed main()
{
int i,j;
fin>>n;
fin.get();
for(i=1;i<=n;++i)
{
fin>>s;
for(j=1;j<=n;++j)
{
if(s[j-1]=='1')
a[i].push_back(j);
}
}
/*
for(i=1;i<=n;++i)
{
cout<<"copilul "<<i<<" are prietenii=>";
for(auto aut:a[i])
cout<<aut<<' ';
cout<<'\n';
}*/
backtr(1);
fout<<sol-1;
return 0;
}