Pagini recente » Cod sursa (job #2910738) | Cod sursa (job #1819936) | Cod sursa (job #1852192) | Cod sursa (job #801036) | Cod sursa (job #424926)
Cod sursa(job #424926)
#include <cstdio>
#include <vector>
using namespace std;
#define NMAX 11
int N;
int A[NMAX][NMAX];
int g[NMAX];
vector<int> GRUP[NMAX];
int SOL = 0;
void verificare(int NRG)
{
if(NRG < 2 )
return;
int u[NMAX] = {0};
for(int i = 1 ; i <= NRG ; i++)
{
for(int j = 0 ; j < GRUP[i].size() ; j++)
for(int k = 1 ; k <= N ; k ++)
if(A[GRUP[i][j]][k] == 1)
u[g[k]] = i;
for(int k = 1 ; k <= NRG ; k++)
if(k != i && u[k] != i)
return;
}
SOL++;
}
void back(int k, int NRG)
{
if(k == N + 1)
{
verificare(NRG);
return;
}
for(int i = 1 ; i <= NRG ; i++)
{
GRUP[i].push_back(k);
g[k] = i;
back(k + 1, NRG);
GRUP[i].pop_back();
}
GRUP[++NRG].push_back(k);
g[k] = NRG;
back(k + 1 , NRG);
GRUP[NRG--].pop_back();
}
void citire()
{
char a;
scanf("%d\n",&N);
for(int i = 1 ; i <= N ; ++i)
for(int j = 1 ; j <= N ; ++j)
{
scanf("%c",&a);
if(a == '\n')
scanf("%c",&a);
A[i][j] = a - '0';
}
}
int main()
{
freopen("copii.in","r",stdin);
freopen("copii.out","w",stdout);
citire();
back(1,0);
printf("%d",SOL);
return 0;
}