Pagini recente » Cod sursa (job #1722343) | Cod sursa (job #2843805) | Cod sursa (job #2575805) | Cod sursa (job #1864808) | Cod sursa (job #457268)
Cod sursa(job #457268)
#include <fstream>
using namespace std;
const char FIN[] = "copii.in";
const char FOU[] = "copii.out";
const int MAX = 17;
int N, V[MAX], nr;
char S[MAX][MAX];
int check (int poz) // verifica daca e corecta solutia gasita
{
int viz[MAX][MAX];
memset(viz, 0, sizeof (viz));
for (int i = 0; i < N; ++i)
for (int j = 0; j < N; ++j)
if ( S[i][j] == '1' )
viz[V[i]][V[j]] = 1;
for (int i = 0; i < poz; ++i)
for (int j = 0; j < poz; ++j)
if (viz[i][j] == 0)
if ( i != j)
return 0;
return 1;
}
void copii (int k, int poz)
{
if ( k == N )
if (poz > 1)
nr += check ( poz );
else ;
else
for (int i = 0; i <= poz; ++i)
if ( i < poz ) V[k] = i, copii (k + 1 , poz); //vectorul cu solutii, V
else V[k] = poz , copii (k + 1 , poz + 1);
}
int main()
{
freopen(FIN, "r", stdin);
freopen(FOU, "w", stdout);
scanf("%d\n", &N);
for (int i = 0; i < N; ++i)
fgets( S[i] , MAX, stdin);
copii (0, 0);
printf("%d", nr);
}