Программа находит все перестановки n элементов. В функции perm() в условии пишет, что идентификатор chosen не определен. Объясните пожалуйста в чем проблема и как ее решить.
#include "pch.h"
#include <iostream>
#include <vector>
using namespace std;
int n;
void perm();
vector<int> permutation;
int main()
{
cin >> n;
bool *chosen = new bool[n+1];
perm();
delete[] chosen;
}
void perm()
{
if (permutation.size() == n) {
for (auto c : permutation) {
cout << c << " ";
}
cout << "\n";
}else {
for (int i = 1; i <= n; i++) {
if (chosen[i]) continue;
chosen[i] = true;
permutation.push_back(i);
perm();
chosen[i] = false;
permutation.pop_back();
}
}
}
Как то так
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<int>v(n);
for (int i = 0; i < v.size(); i++)
v[i] = i + 1;
do {
for (const auto& item: v)
cout << item << ' ';
cout << endl;
} while(next_permutation(v.begin(), v.end()));
return 0;
}
Имя chosen видно только в функции main, потому что сущность с таким именем объявлена внутри нее. В другие функции, даже если они вызываются из main, имя chosen попасть не может. Его видимость ограничено main.
Для того чтобы chosen стало видно в функции perm, нужно его "поднять" в область видимости, общую для main и perm. В данном случае глобальную область видимости в которой уже находятся имена n и permutation.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей