生活随笔
收集整理的這篇文章主要介紹了
全排列的生成
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
將會以生成一個’ABCDE’的一個全排列為例
全排列的生成,就是從后面數,找到第一符合順序的(如: ‘D’ < ‘E’)這樣的信號。就要開始處理。
處理方法是:
將找到這個符合順序的位置(如:’B’ < ‘C’),那么就把’C’后面(包括’C’在內的字符串生成一個排好順序(恢復熵值)),再從左邊走,找到第一個比’B’大的字符,那么就把這兩個字符的位置交換。
其實本質上是將比’B’大的數中最小的那個給拿出來,然后交換,再排好序,不過根據這樣的算法,實現了同樣的效果。
這是這個代碼跟大多的全排列生成的不一樣的地方
代碼如下:
#include <iostream>
using namespace std;
string s =
"ABCDE";
void sort(
int start,
int end){
for (
int i = start; i < end; ++i){
for (
int j = i +
1; j <= end; ++j){
if (s[i] > s[j]){
char t = s[i];s[i] = s[j];s[j] = t;}}}
}
void findALittleBigger(
int j ,
int start){
for (
int i = start; i <=
4; ++i){
if (s[i] > s[j]){
char t = s[i];s[i] = s[j];s[j] = t;
break;}}
}
int main(){
cout << s<< endl;
for (
int time =
0;time <
119; ++time){
for (
int i =
4; i >
0; --i) {
if (s[i] > s[i -
1]){ sort(i,
4);findALittleBigger(i -
1, i);
break;}}
cout << s<< endl;}}
總結
以上是生活随笔為你收集整理的全排列的生成的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。