Pagini recente » Cod sursa (job #802344) | Cod sursa (job #1855110) | Cod sursa (job #2672220) | Cod sursa (job #3215112) | Cod sursa (job #1325440)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("copii.in");
ofstream g("copii.out");
int posibilitati, matrice[101][101], n,k,as,se,v[101],gasite[101][101];
void citire ()
{
int i,j;
char rand [101];
f>>n;
f.get ();
for (i=1;i<=n;i++)
{
f.getline (rand,101);
for (j=1;j<=n;j++)
matrice [i][j] = rand [j-1]-'0';
}
for (i=1;i<=n;i++)
matrice [i][i]=1;
}
void init ()
{
v[k]=0;
}
int validare1 ()
{
if (v[k]<v[k-1]+1)
{
v[k]++;
return 1;
}
return 0;
}
int validare2 ()
{
return 1;
}
int verificare ()
{
if (k==n)
return 1; return 0;
}
void afisare ()
{
int maxim =0,i,j;
for (i=1;i<=n;i++)
{
if (v[i] > maxim)
maxim = v[i];
for (j=1;j<=n;j++)
if (matrice [i][j]==1)
gasite [v[i]][v[j]]=1;
}
for (i=1;i<=maxim;i++)
for (j=1;j<=maxim;j++)
if (gasite [i][j]==0)
{
for (i=1;i<=maxim;i++)
for (j=1;j<=maxim;j++)
gasite [i][j]=0;
return ;
}
for (i=1;i<=maxim;i++)
for (j=1;j<=maxim;j++)
gasite [i][j]=0;
posibilitati ++;
}
void backtracking ()
{
k=1;
init ();
while (k>0)
{
as=1;
se=0;
while (as && !se)
{
as=validare1 ();
if (as)
se = validare2 ();
}
if (as)
if (verificare ())
afisare ();
else
{
k++;
init ();
}
else
k--;
}
}
int main()
{
citire ();
backtracking ();
cout << posibilitati-1 ;
return 0;
}