Cod sursa(job #2475945)

Utilizator miruna1224Floroiu Miruna miruna1224 Data 17 octombrie 2019 19:49:04
Problema Copii Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

vector< vector<bool> > m ( 15, vector<bool> (15));
vector<int> sol ( 15, 0 );
bool v[16][16];
int n, grupuri;


void verif ( int nr ){
  int i, j;

  for ( i = 0; i < nr ; i++ )
    for ( j = 0; j < nr; j++ )
      m[i][j] = 0;

  for ( i = 0; i < n ; i++ )
    for ( j = 0; j < n; j++ )
      if (v[i][j])
        m[sol[i]][sol[j]] = 1;

  for (  i = 0; i < nr; i++)
      for ( j = 0; j < nr; j++)
          if (i != j && !m[i][j])
              return;

  if (nr != 1)
    grupuri++;
}


void bkt( int k, int maxi ){
  if ( k == n ){
    verif( maxi );
    return;
  }
  int i;
  for ( i = 0; i <= maxi; i++ ){
    sol[k] = i;
    bkt ( k + 1, ( i < maxi ? maxi : i + 1));
  }
}




int main(){

  int  i, j, nr, x;
  char ch;

  ifstream in ("copii.in");
  in >> n;

  for ( i = 0; i < n; i++ ){
    x = 0;
    for ( j = 0; j < n; j++ ){
       in >> ch;
       v[i][j] = ch - '0';
    }
  }
  in.close();


  bkt ( 0 , 0 );


  ofstream out ( "copii.out" );
  out << grupuri;
  out.close();


  return 0;
}