Нашел программу для выполнения задачи размещения без перестановки, но не могу понять, как работает сам алгоритм, можете объяснить ?
#include <iostream>
using namespace std;
void swap(int* a, int i, int j)
{
int s = a[i];
a[i] = a[j];
a[j] = s;
}
bool NextSet(int* a, int n, int m)
{
int j;
do
{
j = n - 1;
while (j != -1 && a[j] >= a[j + 1])
j--;
if (j == -1)
return false; // больше размещений нет
int k = n - 1;
while (a[j] >= a[k])
k--;
swap(a, j, k);
int l = j + 1, r = n -
1; // сортируем оставшуюся часть последовательности
while (l < r)
swap(a, l++, r--);
}
while (j > m - 1);
return true;
}
void Print(int* a, int n)
{
for (int i = 0; i < n; i++)
cout << a[i] << " ";
cout << endl;
}
int main()
{
int n, m, *a;
cout << "N = ";
cin >> n;
cout << "M = ";
cin >> m;
if (m <= 0 || n <= 0 || n < m)
{
cout << "Error" << endl;
}
else
{
a = new int[n];
for (int i = 0; i < n; i++)
a[i] = i + 1;
Print(a, m);
while (NextSet(a, n, m))
Print(a, m);
}
return 0;
}
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники