Cod sursa(job #1255017)

Utilizator crucerucalinCalin-Cristian Cruceru crucerucalin Data 3 noiembrie 2014 23:40:42
Problema Generare de permutari Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <fstream>
#include <vector>
#include <unordered_set>


void printPerm(std::vector<int> &perm, std::ofstream &out)
{
    for (auto &i : perm)
        out << i + 1 << " ";
    out << "\n";
}

bool isValid(std::vector<int> &perm)
{
    std::unordered_set<int> set(perm.size());

    for (auto i = 0u; i < perm.size(); ++i)
        if (!set.count(perm[i]))
            set.emplace(perm[i]);
        else
            return false;

    return true;
}

void back(std::vector<int> &perm, std::size_t pos, std::ofstream &out)
{
    if (pos == perm.size()) {
        if (isValid(perm))
            printPerm(perm, out);

        return;
    }

    for (std::size_t i = 0; i < perm.size(); ++i) {
        perm[pos] = i;
        back(perm, pos + 1, out);
    }
}

void genPerm(int N, std::ofstream &out)
{
    std::vector<int> v(N, -1);
    back(v, 0, out);
}

int main()
{
    std::ifstream in("permutari.in");
    std::ofstream out("permutari.out");

    int N;
    in >> N;
    in.close();

    genPerm(N, out);
    out.close();

    return 0;
}