全排列打表原理:
遞迴實現:
假設我們要對1,2,3,4四個數進行全排列,過程如下:
(a)首先保持1不變,對2,3,4全排列;
(b)保持2不變,對3,4全排列;
(c)保持3不變,對4全排列,4的排列只有一種。得到1,2,3,4
(d)然後3不能不變了,繼續保持2不變,3,4互換得到1,2,4,3
(e)以1,2打頭的排列完成,接下來把3換到2的位置,繼續(c)、(d)的操作
...code:
#include#include關於stl中列印全排列表的使用:#include
#include
using
namespace
std;
/*(1)n個元素的全排列=(n-1個元素的全排列)+(另乙個元素作為字首);
(2)出口:如果遞迴到只有乙個元素的全排列,則說明已經排完,則輸出陣列;
(3)不斷將每個元素放作第乙個元素,然後將這個元素作為字首,並將其餘元素繼續全排列,等到出口,出口出去後還需要還原陣列;
*/const
int maxn = 1e5+10
;int
a[maxn],n;
void dfs(int b,int
k) printf("\n
");return
; }
for(int i=k;i<=n;i++)
}int main()
有關全排列函式:next_permutation(iterator start,iterator end),和prev_permutation(iterator start,iterator end);
這兩個函式作用是一樣的,區別就在於前者求的是當前排列的下乙個字典序排列,後乙個求的是當前排列的上乙個字典序排列 是否存在。
進行自定義
全排列next_permutation(node,node+n,cmp)
next_permutation(num,num+n)函式是對陣列num中的前n個元素進行全排列
#include #include例題:2017第八屆藍橋杯-c++決賽a組 題目1using
namespace
std;
intmain()
sort(a,a+n);
dowhile(next_permutation(a,a+n));
}return0;
}
題目:
隨意組合view code小明被綁架到x星球的巫師w那裡。
其時,w正在玩弄兩組資料 (23
58) 和 (146
7)他命令小明從一組資料中分別取數與另一組中的數配對,共配成4對(組中的每個數必被用到)。
小明的配法是:
巫師凝視片刻,突然說這個配法太棒了!
因為:每個配對中的數字組成兩位數,求平方和,無論正倒,居然相等:
87^2 + 56^2 + 34^2 + 21^2 = 12302
78^2 + 65^2 + 43^2 + 12^2 = 12302
小明想了想說:「這有什麼奇怪呢,我們地球人都知道,隨便配配也可以啊!」
86^2 + 54^2 + 31^2 + 27^2 = 12002
68^2 + 45^2 + 13^2 + 72^2 = 12002
巫師頓時凌亂了。。。。。
請你計算一下,包括上邊給出的兩種配法,巫師的兩組資料一共有多少種配對方案具有該特徵。
配對方案計數時,不考慮配對的出現次序。
就是說:
與是同一種方案。
注意:需要提交的是乙個整數,不要填寫任何多餘內容(比如,解釋說明文字等)
思路:
由於給出的兩個序列均只有4個值,所以我們可以全排列列舉匹配所有組成然後判值,如果相等則結果++
#include #includeview code#include
using
namespace
std;
int a1[4]=;
int a2[4]=;
int ans=0
;bool
judge()
if(temp1 ==temp2) }//
保證每乙個元素不相同則輸出全排列總個數為n!
void fun(int
x)
//遞迴全排列
for(int i=x; i<4; i++)
}int
main()
46 全排列 全排列 遞迴
遞迴的時候每次確定乙個位置的數字 nums陣列在遞迴過程中分為左右兩部分,左邊部分是已經確定好的部分,而右邊是待確定數字的部分。每次都嘗試用當前位置右邊的數字來交換當前數字以確定當前數字。題目可以使用collections來優化。詳見 class solution 遞迴過程中每次確定乙個位置的數,遞...
46 全排列 47 全排列II
46.全排列 這題和之前做的劍指offer上的字串全排列。一樣。分析 1 如果原始要排列的陣列順序為1 2 3 4,現在只要分別交換1 2,1 3,1 4然後對剩下的3個元素進行遞迴的排列。自己的code 100 class solution if start nums.size 1 return ...
輸出全排列(C 全排列函式)
請編寫程式輸出前n個正整數的全排列 n 10 並通過9個測試用例 即n從1到9 觀察n逐步增大時程式的執行時間。輸入格式 輸入給出正整數n 10 輸出格式 輸出1到n的全排列。每種排列佔一行,數字間無空格。排列的輸出順序為字典序,即序列a 1,a2,an 排在序列b1,b2,bn之前,如果存在k使得...