Pagini recente » Cod sursa (job #2154837) | Cod sursa (job #599699) | Cod sursa (job #2422052) | Cod sursa (job #2674209) | Cod sursa (job #1511376)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
FILE *in, *out;
const int dmax = 10;
bool A[dmax+1][dmax+1], D[dmax+1][dmax+1];
int sol[dmax+1];
int N, answer;
void validitate(int m)
{
memset ( D, 0, sizeof ( D ) );
for ( int i = 1; i <= N; i++ )
for ( int j = 1; j <= N; j++ )
if ( A[i][j] == 1 )
D[ sol[i] ][ sol[j] ] = 1;
for ( int i = 1; i <= m; i++ )
for ( int j = 1; j <= m; j++ )
if ( i != j )
if ( D[i][j] == 0 )
return;
answer++;
}
void afisare(int m)
{
if(m >= 2) // POT SA AM SOLUTIE
{
validitate(m);
}
}
void bkt(int p, int m) // m - NR MAX DE SUBMULTIMI DINTR - O PARTIRIE
{
if(p-1 == N) afisare(m);
else
{
for(int i = 1; i <= m; i++)
{
// PUN p IN SUBMULTIMEA i
sol[p] = i;
bkt(p+1,m);
}
sol[p] = m+1;
bkt(p+1,m+1);
}
}
int main()
{
in = fopen("copii.in", "r");
out = fopen("copii.out", "w");
char c;
fscanf(in, "%d", &N);
fscanf(in, "%c", &c); // TREC DE ENTER
for(int i = 1; i <= N; i++)
{
for(int j = 1; j <= N; j++)
{
fscanf(in, "%c", &c);
int x = c - '0';
A[i][j] = x;
}
fscanf(in, "%c", &c); // TREC DE ENTER
}
bkt(1,0);
fprintf(out, "%d", answer);
return 0;
}