Cod sursa(job #3150964)

Utilizator Luka77Anastase Luca George Luka77 Data 19 septembrie 2023 11:06:24
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("sirdesc.in");
ofstream fout("sirdesc.out");

const int ARRMAX = 7;
int n, m, k, d, nr_perm, itr = 1;
bool frq[45];
int arr[ARRMAX], perm[45];

inline void backtracking(int step)
{
    //if(itr == m + 1)
        //exit(0);
    if(step == k + 1)
    {
        nr_perm++;
        if(nr_perm == arr[itr])
        {
            itr++;
            for(int i = k; i >= 1; -- i)
            {
                fout << perm[i] << ' ';
            }
            fout << '\n';
        }
    }
    else
    {
        for(int i = 1; i <= n; ++ i)
        {
            if(!frq[i])
            {
                if(step == 1)
                {
                    frq[i] = 1;
                    perm[step] = i;
                    backtracking(step + 1);
                    frq[i] = 0;
                }
                if(i - perm[step - 1] >= d)
                {
                    frq[i] = 1;
                    perm[step] = i;
                    backtracking(step + 1);
                    frq[i] = 0;
                }
            }
        }
    }
}

int main()
{
    fin >> n >> k >> d >> m;
    
    for(int i = 1; i <= m; ++ i)
    {
        fin >> arr[i];
    }
    
    backtracking(1);
}