Pagini recente » Cod sursa (job #389517) | Rating dogariu matei (dogariumatei) | Cod sursa (job #535039) | Cod sursa (job #523492) | Cod sursa (job #1814434)
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
ifstream fin("copii.in");
ofstream fout("copii.out");
const int MAXN = 15;
int n, Sol;
char a[MAXN][MAXN];
vector <int> grup[MAXN];
int st[MAXN], i, j;
void back(int k, int ng) {
if (k > n) {
if (ng < 2)
return;
int viz[MAXN];
memset(viz, 0, sizeof(viz));
//pentru fiecare grup luam jucatorii compenenti si marcam prietenii acestora
//vectorul st[i] ne spune in ce grup se afla jucatorul i
for (int i = 1; i <= ng; ++i) {
memset(viz, 0, sizeof(viz));
for (int j = 0; j < grup[i].size(); ++j)
{
for (int k = 1; k <= n; ++k)
if (a[grup[i][j]][k] == '1')
viz[st[k]] = 1;
}
for (int j = 1; j <= ng; ++j)
{
if (viz[j] == 0 && i != j)
return;
}
}
++Sol;
return;
}
for (int i = 1; i <= ng; ++i) {
grup[i].push_back(k);
st[k] = i;
back(k+1, ng);
grup[i].pop_back();
}
grup[++ng].push_back(k);
st[k] = ng;
back(k+1, ng);
grup[ng--].pop_back();
}
int main() {
fin >> n;
for (int i = 1; i <= n; ++i) {
fin >> (a[i]+1);
}
back(1, 0);
fout << Sol << endl;
return 0;
}