Pagini recente » Cod sursa (job #3142732) | Cod sursa (job #3317228) | Cod sursa (job #3306720) | Cod sursa (job #3341320) | Cod sursa (job #3326287)
#include <fstream>
using namespace std;
ifstream cin("dusman.in");
ofstream cout("dusman.out");
int n, K, m;
int x[1001]; // soluția curentă
bool F[1001]; // folosit
int dusman[1001][1001];
int cont = 0; // câte permutări valide am generat
void afis() {
for (int i = 1; i <= n; i++)
cout << x[i] << " ";
cout << "\n";
}
// k = poziția curentă
void back(int k) {
if (cont >= K) return; // deja am găsit K-a permutare
for (int i = 1; i <= n; i++) {
if (!F[i]) {
// verificăm vecinul stânga (k-1)
if (k > 1 && dusman[i][x[k-1]]) continue;
x[k] = i;
F[i] = true;
if (k == n) {
cont++;
if (cont == K) afis(); // găsit K-a permutare
} else {
back(k + 1);
}
F[i] = false;
}
}
}
int main() {
cin >> n >> K >> m;
for (int i = 1; i <= m; i++) {
int a, b;
cin >> a >> b;
dusman[a][b] = dusman[b][a] = 1;
}
back(1);
return 0;
}