Cod sursa(job #1003566)

Utilizator Darius15Darius Pop Darius15 Data 30 septembrie 2013 22:00:56
Problema Combinari Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <cmath>

using namespace std;
ifstream f("combinari.in");
ofstream g("combinari.out");
int n, k, a[19];

void init (int l) {
  a[l] = l-1;
}

bool succesor (int l) {
  a[l]++;
  return a[l] < n-(k-l)+1;
}

bool valid (int l) {
  bool ok = true;
  int i;

  for (i = 1; i <= l-1; i++)
    if (a[i] >= a[l])
      ok = false;
  return ok;
}

bool sol (int l) {
  return l == k; // Am completat toate cele n locuri?
}

void tip () {
  int i;

  for (i = 1; i <= k; i++)
    g << a[i] << ' ';
  g << endl;
}

void bt (int l) {
  init (l);           // initializare
  while (succesor(l)) // cat timp avem un succesor
    if (valid(l))     // Sunt indeplinite conditiile?
      if (sol(l))     // Avem o solutie completa?
        tip();        // Prezentam solutia.
      else            // Nu?
        bt(l+1);      // Trecem la nivelul urmator.
}
int main()

{
    f>>n>>k;
    bt(1);
    return 0;
}