Pagini recente » Cod sursa (job #17700) | Cod sursa (job #3143116) | Cod sursa (job #734234) | Cod sursa (job #1948521) | Cod sursa (job #2127529)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("copii.in");
ofstream fout("copii.out");
int nc,n,linie,coloana;
long long F;
int P[15];
char V[15],q;
bool Adiac[30][30];
short int MultPret[30][30];
bool Leg[15];
void generare(int);
void Afisare();
bool Verif();
int main()
{
fin>>n;
fin.get(q);
for (linie=1;linie<=n;linie++)
{
fin.getline(V,15);
for (coloana=1;coloana<=n;coloana++)
Adiac[linie][coloana]=V[coloana-1]-'0';
}
generare(1);
fout<<F;
return 0;
}
void generare(int k)
{
int i2,j;
if (k==n+1)
{
if (Verif())
F++;
}
else
{
for (i2=1;i2<=nc;i2++)
{
P[k]=i2;
for (j=1;j<=n;j++)
if (Adiac[k][j]==1)
MultPret[i2][j]++;
generare(k+1);
for (j=1;j<=n;j++)
if (Adiac[k][j]==1)
MultPret[i2][j]--;
}
if (nc<n)
{
nc++;
P[k]=nc;
for (j=1;j<=n;j++)
if (Adiac[k][j]==1)
MultPret[nc][j]++;
generare(k+1);
for (j=1;j<=n;j++)
if (Adiac[k][j]==1)
MultPret[nc][j]++;
nc--;
}
}
}
void Afisare()
{
int i2,j;
for (i2=1;i2<=nc;i2++)
{
for (j=1;j<=n;j++)
if (P[j]==i2)
fout<<j;
fout<<"*";
}
fout<<"\n";
}
bool Verif()
{
if (nc<2)
return 0;
int i2,j,s;
for (i2=1;i2<=nc;i2++)
{
for (j=1;j<=n+1;j++)
Leg[j]=0;
for (j=1;j<=n;j++)
if (MultPret[i2][j]>0&&i2!=P[j])
Leg[P[j]]=1;
for (j=1,s=0;j<=nc;j++)
s+=Leg[j];
if (s!=nc-1)
return 0;
}
return 1;
}