Pagini recente » Cod sursa (job #1036483) | Cod sursa (job #1293057) | Cod sursa (job #1938746) | Cod sursa (job #607074) | Cod sursa (job #516751)
Cod sursa(job #516751)
#include <fstream.h>
ifstream f("copii.in");
ofstream g("copii.out");
int c,s[11],max[11],n;
char a[11][11];
char prieten[11][11];
/*void afis()
{ int i,j;
for(j=1;j<=max[n];j++)
{ g<<"{ ";
for(i=1;i<=n;i++) if(s[i]==j) g<<i<<' ';
g<<"} ";
}
g<<'\n';
}*/
int verif()
{
for(int x=1;x<=max[n];x++)
{for(int y=1;y<x;y++) if(prieten[x][y]=='0') return 0;
for(int y=x+1;y<=max[n];y++) if(prieten[x][y]=='0') return 0;}
return 1;
}
int valid(int k)
{ if(s[k]>max[k-1]+1)return 0;
return 1;
}
void back(int k)
{ int i;
for(i=1;i<=n;i++)
{s[k]=i;
if(valid(k)) { max[k]=(s[k]>max[k-1])?s[k]:max[k-1];
for(int x=1;x<=n;x++) if(a[k][x]=='1') prieten[s[k]][s[x]]='1';
if(k==n) if(verif()) c++;
else;
else back(k+1);
}
}
}
int main()
{ f>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) f>>a[i][j];
back(1);
g<<c<<'\n';
f.close(); g.close();
return 0;
}