Cod sursa(job #2302395)

Utilizator SirStevensIonut Morosan SirStevens Data 14 decembrie 2018 15:59:20
Problema Dusman Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <stdlib.h>

using namespace std;

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

int enemies[1000][1000];

void permutations(int poz, int n, vector <int>& arr, int* used, int k, int currCnt){

    if(poz == n+1){
        currCnt++;
        if(currCnt == k){
            for(int i = 0; i < arr.size(); i++){
                cout << arr[i] << ' ';
            }
            cout << '\n';

            exit(0);
        }
        return;
    }
        for(int i = 1; i <= n; i++){
            if(!used[i]){
                if(arr.size() == 0){
                    arr.push_back(i);
                    used[i] = 1;
                    permutations(poz+1, n, arr, used, k, currCnt);
                    arr.pop_back();
                    used[i] = 0;
                }else{
                    if(!enemies[arr.back()][i]){

                        arr.push_back(i);
                        used[i] = 1;
                        permutations(poz+1, n, arr, used, k, currCnt);
                        arr.pop_back();
                        used[i] = 0;
                    }

                }

            }

        }
}


int main()
{
    vector <int> arr;
    int n, m, k, *used;
    used = new int[n+1];
    in >> n >> k >> m;

    for(int i = 1; i <= n; i++){
        for(int j = 1; j <= n; j++){
            enemies[i][j] = 0;
        }
    }
    int x, y;
    for(int i = 1; i <= m; i++){
        in >> x >> y;
        enemies[x][y] = enemies[y][x] = 1;

    }
    for(int i = 1; i <= n; i++){
        used[i] = 0;
    }
    //recursiveFunction(1, n, arr); // subset
    //arr.clear();
    permutations(1, n, arr, used, k, 0);
    return 0;
}