Pagini recente » Cod sursa (job #3142996) | Cod sursa (job #2230310) | Cod sursa (job #2559107) | Cod sursa (job #450962) | Cod sursa (job #457270)
Cod sursa(job #457270)
#include <cstdio>
#include <string>
const char FIN[] = "copii.in";
const char FOU[] = "copii.out";
const int MAX = 12;
int N, V[MAX], nr;
char S[MAX][MAX];
int check (int poz) // verifica daca e corecta solutia gasita
{
int viz[MAX][MAX]; // verificam daca S[i][j] == '1', adica viz[V[i]][V[j]] = 1
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) // daca i, j nu a fost marcat in vectorul V
if ( i != j) // si daca i ≠ j
return 0; // nu se respecta conditia
return 1;
}
void copii (int k, int poz)
{
if ( k == N )
if (poz > 1)
nr += check ( poz ); // incrementam cu 1 solutiile daca se respecta conditia
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); //vectorul cu solutii, V
}
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);
}