Pagini recente » Cod sursa (job #2498423) | Cod sursa (job #683093) | Cod sursa (job #3127696) | Cod sursa (job #700795) | Cod sursa (job #433782)
Cod sursa(job #433782)
#include <fstream>
#include<cstring>
using namespace std;
int lib[11],fr[11],a[11],n,x[11],mat[11][11];
long long sol;
string s;
ifstream fi("back.in");
ofstream fo("back.out");
bool verifica(void)
{
int i,j,t,ok;
memset(x,0,sizeof(x));
ok=1;
if(fr[2]==0) ok=0; else
for(i=1;i<=10 and fr[i]==1;i++)
{
for(j=1;j<=n;j++)
if(a[j]==i) for(t=1;t<=n;t++)
if(mat[j][t]==1) x[a[t]]=1;
for(j=1;j<=n;j++)
if((j!=i)&&(fr[j]!=0)&&(x[j]!=1)) { ok=0; break; }
if(ok==0) break;
}
if(ok==0) return 0; else return 1;
}
void tipareste(void)
{
int i,ok;
memset(fr,0,sizeof(fr));
for(i=1;i<=n;i++)
fr[a[i]]=1;
ok=1;
for(i=2;i<=10;i++)
if((fr[i]==1)&&(fr[i-1]==0)) ok=0;
if(ok==1)
{
if(verifica()) sol++;
/*{
for(i=1;i<=n;i++)
fo<<a[i]<<" ";
fo<<"\n";
}
*/
}
}
void back(int k)
{
int i;
if(k==n+1) tipareste(); else
for(i=1;i<=n;i++)
{
//if((k==1)&&(i==2)) break;
a[k]=i;
if((a[k]==a[k-1])||(a[k]==a[k-1]+1)||(a[k]+1==a[k-1]))
back(k+1);
}
}
int main()
{
int i,j;
ifstream fi("back.in");
ofstream fo("back.out");
sol=0;
fi>>n;
getline(fi,s);
for(i=1;i<=n;i++)
{
getline(fi,s);
for(j=0;j<=n-1;j++)
if(s[j]-48==1) mat[i][j+1]=1;
}
back(1);
fo<<sol<<"\n";
return 0;
}