1. 程式人生 > >003:全排列

003:全排列

003:全排列

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

輸入
輸入只有一行,是一個由不同的小寫字母組成的字串,已知字串的長度在1到6之間。
輸出
輸出這個字串的所有排列方式,每行一個排列。要求字母序比較小的排列在前面。字母序如下定義:

已知S = s 1s 2...s k , T = t 1
t 2...t k,則S < T 等價於,存在p (1 <= p <= k),使得
s 1 = t 1, s 2 = t 2, ..., s p - 1 = t p - 1, s p < t p成立。
樣例輸入
abc
樣例輸出
abc
acb
bac
bca
cab
cba
#include <iostream>
#include <algorithm>
using
namespace std; void permute(string s, int i) { if (i == s.size()) { cout << s << endl; return; } for (int j=i; j<s.size(); j++) { swap(s[i], s[j]); permute(s, i+1); } return; } int main(){ string s; cin >> s; sort(s.begin(),s.end()); permute(s,
0); }

依次選擇首元素,

swap 後不用換回來

例  1234---------  進入子問題遞迴  234  324 423 ---------  選擇234 進入子問題遞迴  34 43  輸出

      2134---------。。。。

      3124--------。。。。

      4123--------。。。。。