Pagini recente » Cod sursa (job #940110) | Cod sursa (job #2544251) | Cod sursa (job #1165676) | Cod sursa (job #1554277) | Cod sursa (job #2477273)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("copii.in");
ofstream g("copii.out");
int calcu = 0, FinalResult = 0;
vector <int> viz(15, 0);
vector <int> groups(15);
vector<vector<int> > M(15, vector<int>(15));
void CheckIfGood(int maxx, int n)
{
//cout << maxx << " ";
int ok = 1;
int i, j;
bool m[16][16] = {0};
for ( i = 0; i < maxx ; i++ )
for ( j = 0; j < maxx; j++ )
m[i][j] = 0;
for ( i = 0; i < n ; i++ )
for ( j = 0; j < n; j++ )
if (M[i][j])
m[groups[i]][groups[j]] = 1;
for ( i = 0; i < maxx; i++)
for ( j = 0; j < maxx; j++)
if (i != j && !m[i][j])
{
//cout << i << " " << j;
return;
}
if (maxx != 1)
FinalResult++;
}
void BackGroups(int k, int n, int maxx)
{
//cout << k;
if (k == n)
{
// for (int i = 0; i < n; i++)
// cout << groups[i] << " ";
// cout <<"\n";
CheckIfGood(maxx, n);
return;
}
for (int i = 0; i <= maxx; i++)
{
//cout << i;
groups[k] = i;
int max_1;
if (i >= maxx)
max_1 = i + 1;
else
max_1 = maxx;
BackGroups(k + 1, n, max_1);
}
}
int main()
{
int N, maxx = 0;
f >> N;
for (int i = 0; i < N; i++)
{
int local;
f >> local;
for (int j = N - 1; j >= 0; j--)
{
M[i][j] = local % 10;
local /= 10;
}
}
BackGroups(0, N,maxx);
g << FinalResult;
//cout << FinalResult;
return 0;
}