Pagini recente » Monitorul de evaluare | Profil usureluflorian | Profil RosuDragos123 | Cod sursa (job #2006503) | Cod sursa (job #428949)
Cod sursa(job #428949)
#include<fstream>
using namespace std;
ifstream in("copii.in");
ofstream out("copii.out");
bool copii[11][11], grupe[11][11];
int sol[11], n, p, nr;
void prelucrare(int maxx)
{
int i, j;
if(maxx==1)
return;
for(i=1; i<=maxx; ++i)
for(j=1; j<=maxx; ++j)
grupe[i][j] = false;
for(i=1; i<=n; ++i)
for(j=1; j<=n; ++j)
if(copii[i][j] && sol[i]!=sol[j])
grupe[sol[i]][sol[j]] = true;
for(i=1; i<=maxx; ++i)
for(j=1; j<=maxx; ++j)
if(i!=j && !grupe[i][j])
return;
++nr;
}
void back(int p, int maxx)
{
if(p == 1+n)
{
prelucrare(maxx);
return;
}
for(int i=1; i<= maxx; i++)
{
sol[p] = i;
back(p+1, maxx);
}
sol[p] = maxx+1;
back(p+1, maxx+1);
}
int main()
{
char s[16];
in>>n>>ws;
for(int i=1; i<=n; i++)
{
in.getline(s+1,16);
for(int j=1; j<=n; j++)
if(s[j]=='1')
copii[i][j]=true;
}
back(1, 0);
out<<nr;
return 0;
}