Pagini recente » Cod sursa (job #2078568) | Cod sursa (job #2476392) | Cod sursa (job #1949081) | Cod sursa (job #1914710) | Cod sursa (job #2147333)
///ardelean alexandru <[email protected]>
///To:alexandru ardelean
///Feb 26 at 7:25 PM
#include <fstream>
using namespace std;
ifstream cin("copii.in");
ofstream cout("copii.out");
const int N = 11;
int n, solutii(-1);
int p[N], c[N], v[N];
int sol[N];
char d[N][N];
void reset() {
for (int i = 0; i < n; ++i) {
p[i] = c[i] = 0;
}
}
bool echipe(int sol[], int echipe) {
reset();
for (int i = 0; i < n; ++i) {
p[sol[i]] += (1<<i);
c[sol[i]] |= v[i];
}
/*for (int i = 0; i < n; ++i) {
cout << sol[i] << " ";
}
cout << "\n";
for (int i = 0; i <= echipe; ++i) {
cout << p[i] << " ";
}
cout << "\n";
for (int i = 0; i <= echipe; ++i) {
cout << c[i] << " ";
}
cout << "\n\n";*/
for (int i = 0; i <= echipe; ++i) {
for (int j = 0; j <= echipe; ++j) {
if (i != j && (p[i]&c[j]) == 0) {
return false;
}
}
}
return true;
}
void bkt(int poz, int e) {
if (poz == n) {
if (echipe(sol, e)) {
++solutii;
}
return;
}
for (int i = 0; i <= e; ++i) {
sol[poz] = i;
bkt(poz + 1, e);
}
sol[poz] = e + 1;
bkt(poz + 1, e + 1);
}
int main()
{
char ch;
cin >> n;
for (int i = 0; i < n; ++i) {
cin.get(ch);
for (int j = 0; j < n; ++j) {
cin.get(d[i][j]);
}
}
/*for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cout << d[i][j] << " ";
}
cout << "\n";
}
cout << "\n\n";*/
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
v[i] += ((d[i][j] - '0') * (1<<j));
}
}
/*for (int i = 0; i < n; ++i) {
cout << v[i] << " ";
}
cout << "\n\n";*/
bkt(0, -1);
cout << solutii;
return 0;
}