Pagini recente » Cod sursa (job #930125) | Cod sursa (job #249165) | Cod sursa (job #654693) | Cod sursa (job #3036630) | Cod sursa (job #2114441)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
#include <cstring>
using namespace std;
char prieteni[15][15];
bool folosit[11];
ifstream in("copii.in");
ofstream out("copii.out");
queue<vector<int> >q;
int mat[15][15];
int sol[15];
int nrsol=0;
int X;
bool intersect(int a,int b){
for(int i=1;i<=mat[a][0];i++)
for(int j=1;j<=mat[b][0];j++)
if(prieteni[mat[a][i]][mat[b][j]]=='1')
return 1;
return 0;
}
bool verif(int p,int g){
bool ok=0;
for(int i=0;i<=g;i++)
for(int j=0;j<=10;j++)
mat[i][j]=0;
for(int i=1;i<=X;i++)
mat[sol[i]][++mat[sol[i]][0]]=i;
for(int i=1;i<=g;i++){
for(int j=1;j<=g;j++)
if(i!=j)
if(!intersect(i,j))
return 0;
}
return 1;
}
void bkt(int p,int n)
{
if(p-1==X){
nrsol+=verif(p,n);
return ;
}
for(int i=1;i<=n;i++){
sol[p]=i;
bkt(p+1,n);
}
sol[p]=n+1;
bkt(p+1,n+1);
}
int main()
{
int n;
in>>n>>ws;
X=n;
for(int i=1;i<=n;i++)
in>>(prieteni[i]+1);
bkt(1,0);
out<<nrsol-1;
return 0;
}