Cod sursa(job #2478991)

Utilizator alexnigaNiga Alexandru alexniga Data 23 octombrie 2019 00:03:07
Problema Dusman Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.41 kb
#include<bits/stdc++.h>

using namespace std;

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

int n, NumberOfSolutions, K, m;

vector <int> sol(15), viz(15);
vector <vector<int>> mat(1001,vector<int>(1001, 0));

void ShowSolution()
{
    for (int i = 1; i <= n; i++)
        g << sol[i] << " ";
    g << "\n";
}

void back_dusman(int k)
{
    if (k == n + 1)
    {
        ++NumberOfSolutions;
        if (NumberOfSolutions == K)
            {ShowSolution();
            exit(EXIT_SUCCESS);
            }
        return;
    }

    for (int i = 1; i <= n; i++)
    {
        if (viz[i] == 0)
        {

            if (k != 1)
            {
                if (mat[sol[k - 1]][i] == 0)
                    {
                        viz[i] = 1;
                        sol[k] = i;
                        //cout << "//" << sol[k - 1] << " " << sol[k];
                        back_dusman(k + 1);
                    }
            }
            else if (k == 1)
                    {
                        viz[i] = 1;
                        sol[k] = i;
                        back_dusman(k + 1);
                    }
            viz[i] = 0;
        }
    }
}

int main()
{

    f >> n >> K >> m;

    for (int i = 1; i <= m; i++)
    {
        int a, b;
        f >> a >> b;
        mat[a][b] = 1;
        mat[b][a] = 1;
    }

    back_dusman(1);

    return 0;
}