Рекурсивная генерация всех двоичных векторов длины n
n = int(input())
used = [0] * (n + 1)
Alf = list(range(0, 2))
def gen(p, n):
if len(p) == n:
print(*p)
return
for c in Alf:
p.append(c)
if not used[c]:
gen(p, n)
used[c] = 1
used[c] = 0
p.pop()
p = []
gen(p, n)
#include <bits/stdc++.h>
using namespace std;
vector<int> used;
vector<int> Alf;
vector<int> p;
void gen(vector<int>& p, int n) {
if (p.size() == n) {
for (int x : p) cout << x << " ";
cout << "\n";
return;
}
for (int c : Alf) {
p.push_back(c);
if (!used[c]) {
gen(p, n);
used[c] = 1;
}
used[c] = 0;
p.pop_back();
}
}
int main() {
int n;
cin >> n;
used.resize(n + 1);
for (int i = 0; i <= 1; i++) {
Alf.push_back(i);
}
gen(p, n);
return 0;
}
Двоичный вектор — это последовательность из нулей и единиц длины n. Общее количество таких векторов равно 2ⁿ.
Генерация всех подмножеств множества (каждый бит соответствует наличию элемента).
Временная сложность: O(2ⁿ)
Ввод: n — длина вектора
Вывод: все двоичные векторы длины n
3
Вывод:
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1