#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
今日推荐
周排行