Pagini recente » simulare04032019 | Cod sursa (job #2009764) | Cod sursa (job #117890) | Cod sursa (job #89871) | Cod sursa (job #3152912)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("copii.in");
ofstream fout("copii.out");
int N,nr = -1;
int st[15],prieten[15][15];
char s[15],viz[15][15];
int verif(int m){
memset(viz,0,sizeof(viz));
for(int i = 0; i < N; i++){
for(int j = 0; j < N; j++){
if(prieten[i][j] == 1){
viz[st[i]][st[j]] = 1;
}
}
}
for(int i = 1; i <= m; i++){
for(int j = 1; j <= m; j++){
if(i != j && viz[i][j] == 0){
return 0;
}
}
}
return 1;
}
void bkt(int k,int m){
if(k == N && verif(m) == 1){
nr++;
}
if(k == N)
return;
for(int i = 1; i <= m + 1; i++){
st[k] = i;
bkt(k+1,max(m,i));
}
}
int main()
{
fin >> N;
for(int i = 0; i < N; i++){
fin >> s;
for(int j = 0; j < N; j++){
prieten[i][j] = s[j] - '0';
}
}
bkt(0,0);
fout << nr;
return 0;
}