字典序全排序 permutation 火車進出站

2021-09-26 06:47:28 字數 934 閱讀 6140

【描述】

給定乙個正整數n代表火車數量,0<n<10,接下來輸入火車入站的序列,一共n輛火車,每輛火車以數字1-9編號。要求以字典序排序輸出火車出站的序列號。 

【輸入】

有多組測試用例,每一組第一行輸入乙個正整數n(0<n<10),第二行包括n個正整數,範圍為1到9。 

【輸出】

輸出以字典序排序的火車出站序列號,每個編號以空格隔開,每個輸出序列換行,具體見sample。 

樣例輸入 3 1 2 3 

樣例輸出 

1 2 3 

1 3 2 

2 1 3 

2 3 1 

3 2 1

【解題思路】

首先:構造出所有可能的輸出序列,

然後:用字典序輸出

初始化乙個sort vector: 每種輸出結果用string形式存入vector中,然後對vector進行sort,按照字典序排序。

#include #include #include #include #include using namespace std;

bool isoutnum(int *push, int *pop, int len)//判斷pop是不是push的出棧序列

//pop 是有序的排列

sort(popnum, popnum + n);// 這裡因為是連續的指標區間

vectorvec(n);//初始化乙個vector;

for (size_t i = 0; i < vec.size(); i++)

do} while (next_permutation(popnum, popnum + n));//獲取下乙個排列

} return 0;

}

字典序全排列

思路 從左向右找到不符合遞增規律的第乙個數,比如1,2,5,4,3中的這個數就是2,將其與其右面遞增序列中的比他大的最小數,比如在前面例子中的3互換,得到1,3,5,4,2,最後,將該數右邊的遞增序列排序,得到1,3,2,4,5即可。上面這個是求某乙個數的下乙個排列,而全排列只需按這個思路,將初始陣...

字典序全排列

給出正整數n,則1 n這n個數可以構成n!種排列,把這些排列按照從小到大的順序 字典順序 列出,如n 3時,列出1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1 這6個排列。字典序演算法如下 假設這n個數的某乙個排列為 p p1 p2 p3.pj 1 pj pj 1.pk 1 ...

全排列 字典序排列

include includeusing namespace std define dig num 4 void cal int str int first int last cout endl if first last bool get f l int list int former int l...