全排列(按字典序)

2021-09-19 16:39:48 字數 1371 閱讀 5687

描述

給定乙個由不同的小寫字母組成的字串,輸出這個字串的所有全排列。 我們假設對於小寫字母有'a' < 'b' < ... < 'y' < 'z',而且給定的字串中的字母已經按照從小到大的順序排列。

輸入輸入只有一行,是乙個由不同的小寫字母組成的字串,已知字串的長度在1到6之間。

輸出輸出這個字串的所有排列方式,每行乙個排列。要求字母序比較小的排列在前面。字母序如下定義:

已知s = s1s2...sk , t = t1t2...tk,則s < t 等價於,存在p (1 <= p <= k),使得

s1 = t1, s2 = t2, ..., sp - 1 = tp - 1, sp < tp成立。

樣例輸入

abc
樣例輸出

abc

acbbac

bcacab

cba

code:

#include#include#include#include#include#include #include #include #include#include#include #include#include #include #define  inf  0x3f3f3f3f

#define mmt(a,b) memset(a,b,sizeof(a))

typedef long long ll;

const ll max=1000000;

using namespace std;

char c[10];

char s[10];

ll t;

bool vis[10];

void print()

}int main()

第二種方法是stl裡的全排函式——next_permutation()

#include#include#include#include#include#include #include #include #include#include#include #include#include #include #define  inf  0x3f3f3f3f

#define mmt(a,b) memset(a,b,sizeof(a))

typedef long long ll;

const ll max=1000000;

using namespace std;

char c[10];

char s[10];

ll t;

void print()

while(next_permutation(c+1,c+t+1));

}

python 按字典序全排列實現

def swap num,i,j for x in range j,i,1 tmp num x num x num x 1 num x 1 tmp def swapback num,i,j for x in range i,j tmp num x num x num x 1 num x 1 tmp ...

全排列 字典序排列

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...

字典序全排列

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