Cod sursa(job #2475534)

Utilizator mihaicivMihai Vlad mihaiciv Data 17 octombrie 2019 07:11:08
Problema Dusman Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
#include <cstdlib>
//#define f cin
#define NMAX 8001
using namespace std;
ifstream f("dusman.in");
ofstream g("dusman.out");


int n, m, k;
vector<int> a[NMAX];
int v[NMAX];
int vis[NMAX];
int cnt;

void afisare() {
    for (int i = 0; i < n; ++i) {
        g << v[i] + 1 << " ";
    }
}

bool valid(int k1) {
    if (vis[v[k1]] == 1) return false;
    if (k1 == 0) return true;
    int neighbour = v[k1 - 1];
    for (int i = 0; i < a[neighbour].size(); ++i) {
        if (v[k1] == a[neighbour][i]) return false;
    }
    return true;
}

void bk(int k1) {
    for (int i = 0; i < n; ++i) {
        v[k1] = i;
        if (valid(k1)) {
            vis[v[k1]] = 1;
            if (k1 == n - 1) {
                cnt ++;
                if (cnt == k) {
                    afisare();
                    exit(EXIT_SUCCESS);
                }
            } else bk(k1 + 1);
            vis[v[k1]] = 0;
        }
    }
}

int main() {

    f >> n >> k >> m;
    for (int i = 0; i < m; ++i) {
        int x, y;
        f >> x >> y;
        x --;
        y --;
        a[x].push_back(y);
        a[y].push_back(x);
    }

    bk(0);

    return 0;
}