Pagini recente » Borderou de evaluare (job #3350252) | Borderou de evaluare (job #3350153) | Borderou de evaluare (job #3345940) | Borderou de evaluare (job #3330754) | Cod sursa (job #3308317)
#include <bits/stdc++.h>
#define NMAX 1001
using namespace std;
ifstream in("dusman.in");
ofstream out("dusman.out");
bitset<NMAX> dusman[NMAX]; ///dusman[i][j]=1 daca exista o relatie de dusmanie intre i si j
int nr_asezare=1; ///numarul asezarii la care am ajuns pana acum in ordine lexicografica
int asezare[NMAX];
bitset<NMAX> exista;
void generare_asezari(int poz, int n, int k)
{
if(poz>n || nr_asezare>k)
{
if(nr_asezare==k)
{
for(int i=1; i<=n; i++) out << asezare[i] << " ";
}
nr_asezare++;
return;
}
for(int i=1; i<=n; i++)
{
if(exista[i]==0)
{
if(poz>1)
{
if(dusman[asezare[poz-1]][i]==0) ///daca vecinul nu este un dusman
{
exista[i]=1;
asezare[poz]=i;
generare_asezari(poz+1, n, k);
exista[i]=0;
}
}
else ///daca omul nu are vecini
{
exista[i]=1;
asezare[poz]=i;
generare_asezari(poz+1, n, k);
exista[i]=0;
}
}
}
}
int main()
{
int n, k, m;
in >> n >> k >> m;
for(int i=1; i<=m; i++)
{
int a, b;
in >> a >> b;
dusman[a][b]=dusman[b][a]=1;
}
generare_asezari(1, n, k);
return 0;
}