題目描述
從n個不同元素中任取m(m≤n)個元素,按照一定的順序排列起來,叫做從n個不同元素中取出m個元素的乙個排列。當m=n時所有的排列情況叫全排列。
輸入輸入乙個正整數n(n<10)
輸出以字典序給出這n個整數能形成的所有排列,每一行乙個排列
示例輸入
3示例輸出
123132
213231
312321
**:#include#include#includeusing namespace std;
int result[1000000],l=0;//全域性變數陣列result儲存排序結果
void swap(int &a,int &b)
void perm(int num,int start,int end,int oldstart,int oldend)
result[l]=number;
l=l+1;
} else//繼續交換元素位置進行排列 }
}int main()
{ int n;
cin>>n;
int num[n];
for(int i=0;i【注意:依照舉例,題目要求排列結果從小到大輸出】
【如果不用result陣列把排列結果按數字形式記錄再排序後輸出,而是直接在perm函式的判斷start=?end時直接依次輸出元素,不能保證從小到大輸出】
使用遞迴,perm函式對陣列num的start和end區段進行遞迴操作。
輸入 3 過程舉例:
初始num 1 2 3 start=0,end=2
進入perm函式
判斷start≠end,進入for迴圈①,逐個交換至陣列第乙個位置
(對123,1和1交換)num 1 2 3 呼叫perm函式 start=1,end=2
判斷start≠end,進入for迴圈②
(對23,2和2交換)num 1 2 3 呼叫perm函式 start=2,end=2
判斷start=end,計算此時排列結果為數字1 2 3
繼續迴圈②
(對23,3和2交換)num 1 3 2 呼叫perm函式 start=2,end=2
判斷start=end,計算此時排列結果為數字1 3 2
迴圈②一輪結束,交換回去num 1 2 3
迴圈②結束,繼續迴圈①
(對123,2和1交換)num 2 1 3 呼叫perm函式 start=1,end=2
判斷start≠end,進入for迴圈③
(對13,1和1交換)num 2 1 3 呼叫perm函式 start=2,end=2
判斷start=end,計算此時排列結果為數字2 1 3
繼續迴圈③
(對13,3和1交換)num 2 3 1 呼叫perm函式 start=2,end=2
判斷start=end,計算此時排列結果為數字2 3 1
迴圈③一輪結束,交換回去num 1 2 3
迴圈③結束,繼續迴圈①
(對123,3和1交換)num 3 2 1 呼叫perm函式 start=1,end=2
判斷start≠end,進入for迴圈③
(對21,2和2交換)num 3 2 1 呼叫perm函式 start=2,end=2
判斷start=end,計算此時排列結果為數字3 2 1
繼續迴圈③
(對21,1和2交換)num 3 1 2 呼叫perm函式 start=2,end=2
判斷start=end,計算此時排列結果為數字3 2 1
迴圈③一輪結束,交換回去num 1 2 3
迴圈③結束
迴圈①結束
對result陣列記錄的排列結果數字按從打到小排列列印即可。
最終結果:
123132
213231
312321
注:如果元素中有重複元素,只需要在遞迴交換當前元素與首元素使該元素作為首元素時,判斷一下是否這個元素已經重複出現過,如果重複則不再交換它對它以後的剩餘元素進行全排列(直接看下乙個元素),如果沒有重複,繼續。
如有錯誤,歡迎指出。
全排列問題 解題報告
全排列問題 解題報告 2015年08月12日 21 04 52 閱讀數 1488 全排列問題 問題描述 輸出自然數1到n所有不重複的排列,即n的全排列,要求所產生的任一數字序列中不允許出現重複的數字。輸入格式 n 1 n 9 輸出格式 由1 n組成的所有不重複的數字序列,每行乙個序列。輸入樣例 3 ...
全排列問題
一 全排列問題演算法描述如下 舉例 345的全排列分別為 345 354 435 453 534 543,可見將整組數中的所有的數分別與第乙個數交換,這樣就總是在處理後n 1個數的全排列。又舉例 45的全排列有 45 54 可見將第乙個數分別與後面的數交換後輸出即為45的全排列。所以,對於乙個很長一...
全排列問題
題目描述814 全排列問題 鍵盤輸入n 1 n 10 個字元,輸出輸出其全排序。第一行為字元個數k,第二行為k個字元,不用空格隔開。輸出其每種排列佔一行,各字元間用一空格隔開。樣例輸入 3abc 樣例輸出 a b c a c b b a c b c a c b a c a b includeint ...