返回题解分享
讨论 / 题解分享/ 帖子详情

全排列 - 题解

/*
#include <iostream>
#include <vector>
using namespace std;

// 递归函数,用于生成全排列
void permute(vector<int>& nums, size_t start, vector<vector<int>>& result) {
    if (start == nums.size() - 1) { //递归终止条件
        result.push_back(nums);  // 将当前排列加入结果
    } else {
        for (size_t i = start; i < nums.size(); i++) { //从start位置开始遍历
            //核心代码 ===》靠近终止条件 ==》 start+1 代表上一个位置被固定 
            //那start == nums.size() - 1 代表已经到最终位置了
            swap(nums[start], nums[i]);  // 交换元素使得每一个元素都在start位置试试
            permute(nums, start + 1, result);  // 递归生成排列
            swap(nums[start], nums[i]);  // 恢复原状
        }
    }
}

int main() {
    int n;
    cin >> n;

    vector<int> nums(n);
    for (int i = 0; i < n; i++) {
        nums[i] = i + 1;  // 初始化数组
    }

    vector<vector<int>> result;  // 存储所有排列
    permute(nums, 0, result);  // 生成全排列

    // 输出所有排列
    for (const vector<int>& perm : result) {
        for (int num : perm) {
            cout << num << " ";
        }
        cout << endl;
    }

    for ( size_t i = 0; i < result.size(); i++ ) {
        for ( size_t j = 0; j < result[i].size(); j++ ) {
            cout << result[i][j] << " ";
        }
        if(i != result.size() - 1)
        cout << endl;
    }

    return 0;
}
*/
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main() {
    int n;
    cin >> n;

    vector<int> nums(n);
    for (int i = 0; i < n; i++) {
        nums[i] = i + 1;  // 初始化数组
    }

    // 使用 std::next_permutation 生成所有排列
    //next_permutation 的作用是将一个序列(如数组或向量)重新排列,使其成为字典序中的下一个排列。
    //如果当前序列已经是字典序中的最大排列(例如 321),那么它会将序列重置为最小排列(例如 123)。
    do {
        for (int num : nums) {
            cout << num << " ";
        }
        cout << endl;
    } while (next_permutation(nums.begin(), nums.end()));

    return 0;
}
0 回复 0 转发 0 喜欢 5 阅读
回复 (0)
默认 最新
暂无回复,快来抢沙发!