Pagini recente » Cod sursa (job #1960291) | Cod sursa (job #1631886) | Cod sursa (job #3165021) | Cod sursa (job #1161809) | Cod sursa (job #1795758)
#include <fstream>
#include <string>
using namespace std;
ifstream fin("copii.in");
ofstream fout("copii.out");
const int nmax= 10;
int n, sol;
int v[nmax+1];
string s[nmax+1];
bool check( int x ) {
int a[nmax+1][nmax+1];
for ( int i= 0; i<=nmax; ++i ) {
for ( int j= 0; j<=nmax; ++j ) {
a[i][j]= 0;
}
}
for ( int i= 1; i<=n; ++i ) {
for ( int j= 0; j<n; ++j ) {
a[v[i]][v[j+1]]|= (s[i][j]-'0');
}
}
for ( int i= 1; i<=x; ++i ) {
for ( int j= 1; j<=x; ++j ) {
if ( i!=j && a[i][j]==0 ) {
return 0;
}
}
}
return 1;
}
void backt( int k, int sm ) {
if ( k==n+1 ) {
sol+= check(sm);
} else {
for ( int i= 1; i<=sm+1; ++i ) {
v[k]= i;
backt(k+1, max(i, sm));
}
}
}
int main( ) {
fin>>n;
for ( int i= 1; i<=n; ++i ) {
fin>>s[i];
}
backt(1, 0);
fout<<sol-1<<"\n";
return 0;
}