Cod sursa(job #3308317)

Utilizator Lex._.Lex Guiman Lex._. Data 24 august 2025 10:50:58
Problema Dusman Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <bits/stdc++.h>
#define NMAX 1001
using namespace std;

ifstream in("dusman.in");
ofstream out("dusman.out");

bitset<NMAX> dusman[NMAX]; ///dusman[i][j]=1 daca exista o relatie de dusmanie intre i si j

int nr_asezare=1; ///numarul asezarii la care am ajuns pana acum in ordine lexicografica
int asezare[NMAX];
bitset<NMAX> exista;
void generare_asezari(int poz, int n, int k)
{
    if(poz>n || nr_asezare>k)
    {
        if(nr_asezare==k)
        {
            for(int i=1; i<=n; i++) out << asezare[i] << " ";
        }
        nr_asezare++;
        return;
    }
    for(int i=1; i<=n; i++)
    {
        if(exista[i]==0)
        {
            if(poz>1)
            {
                if(dusman[asezare[poz-1]][i]==0) ///daca vecinul nu este un dusman
                {
                    exista[i]=1;
                    asezare[poz]=i;
                    generare_asezari(poz+1, n, k);
                    exista[i]=0;
                }
            }
            else ///daca omul nu are vecini
            {
                exista[i]=1;
                asezare[poz]=i;
                generare_asezari(poz+1, n, k);
                exista[i]=0;
            }
        }
    }
}

int main()
{
    int n, k, m;
    in >> n >> k >> m;
    for(int i=1; i<=m; i++)
    {
        int a, b;
        in >> a >> b;
        dusman[a][b]=dusman[b][a]=1;
    }
    generare_asezari(1, n, k);

    return 0;
}