若給你一堆數,讓你輸出他的全排列,可以有以下方式實現,不過各有優點和缺點:
1.深度優先搜尋:
#included
#include#include#includeusing namespace std;
int n;
int book[100];
int ch[100];
int kong[100];
void dfs(int step)
printf("\n");
return;
}for(int i=0;i
2.next_permutation:#included
#include#include#includeusing namespace std;
int ch[100];
int n;
int main()
}ll cantor(int *ch,int len)
排列在所有的排列中排第幾,
a4-------->指4在 該數列並且能填的 中按字典序的順序排第幾名,從0開始計數,明顯是3
a3-------->指2在 能填的數2,1,3中排第1,因此a3=1
a2-------->指1在 能填的數1,3中排第0,因此a2=0
a1-------->指3在能填的數中排 0,因此a1=0.
因此4213在所有的排列中排名第 3*3!+1*2!+0+0=20,(從0開始計數,排名20)
全排列總結
馬上藍橋杯省賽了 菜雞又是去當分母的 把一些基礎的演算法都總結一下,當作複習了 首先最簡單的是用stl中的next permutation和prev permutation了 next permutation start,end 是輸出下乙個排列,所以用之前要對陣列進行從小到大排序 void per...
全排列總結
接觸全排列已經好長時間了,一直沒有抽空總結一下全排列的相關問題,下面來說一下!一般地,從n個不同元素中取出m m n 個元素,按照一定的順序排成一列,叫做從n個元素中取出m個元素的乙個排列 arrangement 特別地,當m n時,這個排列被稱作全排列 permutation 特別,當n m時為全...
全排列演算法總結
本文同時發布在我的個人部落格 求 n 位的字串的全排列,先確定第 0 位,然後對後面 n 1 位進行全排列,在對 n 1 為進行全排列時,先確定第 1 位,然後對後面的 n 2 位進行全排列.由此得到遞迴函式和遞迴的結束條件。全排列也就是交換位置,到 n 2 位時,就是將 n 2 和 n 1 交換位...