全排列,百度:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
思路: Amn(你应该懂我写的啥,嘿嘿)这里考虑先后顺序,所以就是Amn。先建立第一个排列abc,然后确定第一个位置,第一个位置的确定即是将选定的元素取代第一个位置的元素a,这里如果按字典序就将选定元素取出,将其原位置之前的全部前移,然后将选定元素放到第一个位置,如果不按字典序,就简单地将选定元素与第一个元素互换位置。在这个排列下进入下一次即第二个元素的选取,当选取的元素只剩一个时,那此时的一组排列即是全排列的一组。
举个例子,以下按字典序排列
代码实现
#include <bits/stdc++.h> using namespace std; void recu(int b[], int pos, int len){ if(pos == len){ for(int i = 1; i <= len; i++){ if(i != 1){ cout << " "; } cout << b[i]; } cout << endl; }//这里是选取元素只剩一个时的情况 for(int i = pos; i <= len; i++){ int temp = b[i];//先将元素取出 for(int j = i; j > pos; j--){ b[j] = b[j - 1]; }//然后前移 b[pos] = temp;//然后将元素放到指定位置 recu(b, pos + 1, len);//进行下一次的选取 //以下是将排列过的恢复原序列,进行其他情况的选取 temp = b[pos]; for(int j = pos; j < i; j++){ b[j] = b[j + 1]; } b[i] = temp; } } int main(){ int n; cin >> n; int a[10] = {0}; for(int i = 1; i <= n; i++){ a[i] = i; } recu(a, 1, n); return 0; }
原文:https://www.cnblogs.com/beiweixiaotian/p/12131977.html