Cod sursa(job #2478907)

Utilizator lucianistratiIstrati Lucian lucianistrati Data 22 octombrie 2019 21:19:58
Problema Dusman Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <iostream>
#include <math.h>
#include <fstream>
#include <bits/stdc++.h>
using namespace std;
ifstream fin("maxsubsum.in");
ofstream fout("submultimi.out");
int N,M,K;
map < int , vector<int> > hate;

int perm[1010],viz[1010],contor;
void afisare(int n)
{
    int i,ok=0;
    for(i=1;i<=n;i++)
    {
        cout<<perm[i]<<" ";
    }
    fout<<"\n";
}/*
bool verificare_no_hate(int n)
{
    int i;
    for(i=1;i<=n-1;i++)
    {
        if(hate[{perm[i],perm[i+1]}]==true)
            return false;
    }
    return true;
}*/
bool verificare(int a,int b)
{
    int i;
    for(i=0;i<hate[a].size();i++)
    {
        if(hate[a][i]==b)
            return false;
    }
    return true;
}
void bkt(int k,int n)
{
    if(k==n+1)
    {
//        if(verificare_hate(n)==true)
//        {
            contor++;
            if(contor==K)
            {
                afisare(n);
                //goto eti;
            }
        //}
        return;
    }
    else
    {
        int i;
        for(i=1;i<=n;i++)
        {
            if((viz[i]==0) && ( ( verificare(perm[i],perm[i+1])==true && i<=n-1) || (verificare(perm[i-1],perm[i])==true && i==n)   ))
            {
                viz[i]=1;
                perm[k]=i;
                bkt(k+1,n);
                viz[i]=0;//undo
                //perm[k]=0;//undo
            }
        }
    }
}
int main()
{
    int i;
    fin>>N>>K>>M;
    for(i=1;i<=M;i++)
    {
        int a,b;
        fin>>a>>b;
        hate[a].push_back(b);
        hate[b].push_back(a);
    }
    bkt(1,N);
    return 0;
}