Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Chương trình C++ triển khai Next_Permutation trong STL

std::next_permutation sắp xếp lại các phần tử thành hoán vị tiếp theo về mặt từ điển (lexicographically greater). Trả về true nếu hoán vị tiếp theo tồn tại, ngược lại trả về false và biến phạm vi thành hoán vị đầu tiên (tăng dần).

Thuật toán

  1. Nhập số phần tử và giá trị.
  2. Sắp xếp mảng tăng dần (hoán vị đầu tiên).
  3. Lặp: hiển thị, gọi next_permutation cho đến khi trả về false.

Ví dụ mã

#include <iostream>
#include <algorithm>
using namespace std;

void show(int a[], int n) {
    for (int i = 0; i < n; ++i)
        cout << a[i] << " ";
    cout << endl;
}

int main() {
    int e;
    cout << "Nhập số phần tử: ";
    cin >> e;
    int elements[e];

    for (int i = 0; i < e; ++i) {
        cout << "Phần tử " << i + 1 << ": ";
        cin >> elements[i];
    }

    sort(elements, elements + e);

    cout << "Tất cả " << e << "! hoán vị tăng dần:\n";
    do {
        show(elements, e);
    } while (next_permutation(elements, elements + e));

    return 0;
}

Kết quả mẫu (n=4, giá trị 7,6,2,10)

2 6 7 10
2 6 10 7
2 7 6 10
2 7 10 6
2 10 6 7
2 10 7 6
6 2 7 10
6 2 10 7
6 7 2 10
6 7 10 2
6 10 2 7
6 10 7 2
7 2 6 10
7 2 10 6
7 6 2 10
7 6 10 2
7 10 2 6
7 10 6 2
10 2 6 7
10 2 7 6
10 6 2 7
10 6 7 2
10 7 2 6
10 7 6 2