递规实现全排列

#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;

void PAndPrint(vector<int> &answer, vector<int> last_nums, int last_del_num, int last_del_place, int depth, int &counter) {
    if(last_nums.size() != 0)
        answer[depth] = last_del_num + 1;
    if(depth == answer.size() - 1) {
        for(int i = 0; i < answer.size(); ++i)
            printf("%d ", answer[i]);
        printf("\n");
        counter = counter + 1;
    }

    last_nums.erase(last_nums.begin() + last_del_place);

        for(int i = 0; i < last_nums.size(); ++i) {
            PAndPrint(answer, last_nums, last_nums[i] - 1, i, depth + 1, counter);
        }
}

int main() {
    vector<int> nums;
    vector<int> answer;
    int n = 0, counter = 0;
    scanf("%d", &n);
    for(int i = 1; i <= n; ++i) {
        nums.push_back(i);
        answer.push_back(0);
    }
    for(int i = 0; i < nums.size(); ++i) {
        PAndPrint(answer, nums, i, i, 0, counter);
    }
    printf("P%d %d = %d\n", n, n, counter);
    system("pause");
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/Iuppiter/p/11061441.html