Pagini recente » Cod sursa (job #1165287) | Cod sursa (job #2222785) | Cod sursa (job #1324354) | Cod sursa (job #1913321) | Cod sursa (job #2477012)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream f("copii.in");
ofstream g("copii.out");
int calcu = 0, FinalResult = 0;
void CheckIfGood(int maxx, int n, vector <int>groups, vector<vector<int> > M)
{
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])
return;
if (maxx != 1)
FinalResult++;
}
void BackGroups(int k, int n, vector <int>&groups, int maxx, vector<vector<int> > M)
{
//cout << k;
if (k == n)
{
// for (int i = 0; i < n; i++)
// cout << groups[i] << " ";
// cout <<"\n";
CheckIfGood(maxx, n, groups, M);
return;
}
if (maxx + 1 < n)
{
for (int i = 0; i <= maxx + 1; i++)
{
//cout << i;
groups[k] = i;
BackGroups(k + 1, n, groups, max(i, maxx), M);
}
}
}
int main()
{
int N, maxx = 0;
f >> N;
vector <int> viz(N, 0);
vector <int> groups(N);
vector<vector<int> > M(N, vector<int>(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;
}
}
/* for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
cout << M[i][j] << " ";
cout << "\n";
}
*/
BackGroups(0, N, groups, maxx, M);
g << FinalResult;
return 0;
}