Я пытаюсь напечатать все перестановки набора {1, 2, ... N}, но безуспешно.
Я пытался реализовать это с помощью возврата. Когда я добавляю элемент в перестановку, я проверяю, не существует ли он в нем, затем я проверяю, является ли это решением (если в перестановке есть N чисел), затем печатаю его.
Я ищу, может ли кто-нибудь помочь мне указать на ошибку в коде.
#include<iostream>
#include<cstdlib>
#define MAX 9
using namespace std;
int check(int *s, int N) { //checking if the elements of the permutation are all distinct
for (int i = 1; i <= N - 1; i++)
for (int j = i + 1; j <= N; j++)
if (s[i] == s[j])
return 0;
return 1;
}
int solution(int *s, int k, int N) { //if we have reached N numbers it's a solution
if (k == N)
return 1;
return 0;
}
void print_solution(int *s, int N) { //print the permutation
for (int i = 1; i <= N; i++)
cout << s[i] << " ";
cout << endl;
}
void permutation_bkt(int *s, int k, int N) { //backtracking permutations
for (int i = 1; i <= N; i++) {
s[k] = i;
if (check(s, N)) {
if (solution(s, k, N)) {
print_solution(s, N);
}
else {
permutation_bkt(s, k++, N);
}
}
}
}
int main() {
int s[MAX], k = 1;
int N; cout << "N= "; cin >> N;
permutation_bkt(s, k, N);
system("Pause");
return 0;
}