Pagini recente » Cod sursa (job #1868512) | Cod sursa (job #2951422) | Cod sursa (job #561711) | Cod sursa (job #140020) | Cod sursa (job #2983870)
#include <fstream>
#include <vector>
const int NMAX=15;
using namespace std;
ifstream fin("copii.in");
ofstream fout("copii.out");
void bkt(int);
void verif();
int maxim, ans, n;
int p[NMAX];
bool f[NMAX];
vector <int> v[NMAX], a[NMAX];
int main()
{
int i, j;
char nr;
fin>>n;
for(i=1; i<=n; i++)
{
for(j=1; j<=n; j++)
{
fin>>nr;
if(nr=='1') a[i].push_back(j);
}
}
bkt(1);
fout<<ans-1<<'\n';
}
void bkt(int poz)
{
int i, aux;
if(poz==n+1) verif();
else
{
for(i=1; i<=maxim+1; i++)
{
p[poz]=i;
aux=maxim;
if(i==maxim+1) maxim++;
bkt(poz+1);
maxim=aux;
}
}
}
void verif()
{
int i, j;
for(i=1; i<=maxim; i++) v[i].clear();
for(i=1; i<=n; i++) v[p[i]].push_back(i);
for(i=1; i<=maxim; i++)
{
for(j=1; j<=maxim; j++) f[i]=false;
for(auto k:v[i])
{
for(auto j:a[k]) f[p[j]]=true;
}
for(j=1; j<=maxim; j++)
{
if(j!=i && !f[j]) return;
}
}
ans++;
}