Cod sursa(job #3366614)

Utilizator andreicapyCapitanescu Andrei andreicapy Data 2 octombrie 2026 19:12:16
Problema Dusman Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.87 kb
///sursa provizorie

#include <fstream>

using namespace std;

ifstream fin("dusman.in");
ofstream fout("dusman.out");
int n,ciclu,k,m,a,b,gasit=0;
int dusmani[1010][4];
int v[1001],f[1001];


int verif(int pas){
        if(pas>1){

            for(int i=1;i<=3;i++){
                if(v[pas-1]==dusmani[v[pas]][i] ){
                    return 0;
                }
            }
            return 1;
        }else{
            return 1;
        }
}

void backtrack(int pas){
        if(pas==n+1){
            ciclu++;
            if(ciclu==k){
                for(int i=1;i<=n;i++){
                    fout<<v[i]<<" ";
                }
                gasit=1;

            }
        }else{
            if(gasit==0){
                for(int i=1;i<=n;i++){
                    if(f[i]==0){
                        v[pas]=i;
                        f[i]=1;
                        if(verif(pas)==1){
                            backtrack(pas+1);
                        }
                        f[i]=0;
                    }
                }
            }
        }
}


int main()
{
    fin>>n>>k>>m;
    for(int i=1;i<=m;i++){
        fin>>a>>b;
        if(dusmani[a][1]==0){
            dusmani[a][1]=b;
        }else{
            if(dusmani[a][1]!=0 && dusmani[a][2]==0){
                dusmani[a][2]=b;
            }else{
                if(dusmani[a][2]!=0 && dusmani[a][3]==0){
                    dusmani[a][3]=b;
                }
            }
        }
        if(dusmani[b][1]==0){
            dusmani[b][1]=a;
        }else{
            if(dusmani[b][1]!=0 && dusmani[b][2]==0){
                dusmani[b][2]=a;
            }else{
                if(dusmani[b][2]!=0 && dusmani[b][3]==0){
                    dusmani[b][3]=a;
                }
            }
        }
    }

    backtrack(1);
    return 0;
}