Cod sursa(job #877238)

Utilizator vgabi94Vaduva Gabriel vgabi94 Data 12 februarie 2013 18:22:35
Problema Generare de permutari Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
using namespace std;
ifstream in("permutari.in");
ofstream out("permutari.out");
// st - stiva in care memorez elementele permutarii
// k  - nivelul stivei
// N  - numarul elementelor permutarii
int st[9], k, N;
// variabile flag: ev (este valid?), as (are succesor?)
bool ev, as;
void init()
{ st[k] = 0; }
bool succesor()
{
    if (st[k] < N) { st[k] += 1; return true; }
    return false;
}
bool valid()
{
    for (int i = 1; i < k; i++)
        if (st[k] == st[i]) return false;
    return true;
}
bool solutie() { return k == N; }
void tipar()
{
    for (int i = 1; i <= k; i++)
        out << st[i] << ' ';
    out << '\n';
}
void bt()
{
    k = 1; init();
    while (k > 0)
    {
        do
        {
            as = succesor();
            if (as) ev = valid();
        } while (as && !ev);
        if (as)
        {
            if (solutie()) tipar();
            else { k++; init(); }
        }
        else k--;
    }
}
int main()
{
    in >> N;
    bt();
    return 0;
}