全排列

来源:互联网 发布:淘宝上最火的男装店铺 编辑:程序博客网 时间:2024/04/30 20:08

Problem

Print all permutations of n distinct elements.

Solution

// Permutaion.cpp : Defines the entry point for the console application.//#include <iostream>#include <vector>#include <iterator>using namespace std;void Swap(vector<char>& vec, int posA, int posB){    char temp = vec[posA];    vec[posA] = vec[posB];    vec[posB] = temp;}void Permutation(vector<char>& vec, int count){    if(vec.size() == 0){        cout << "Empty character set" << endl;    }    else if(vec.size() == 1){        cout << vec[0] << endl;        return;    }        if(count == vec.size()){        copy(vec.begin(), vec.end(), ostream_iterator<char>(cout, " "));        cout << endl;        return;    }    for(int i = count; i < vec.size(); i ++){        Swap(vec, count, i);        Permutation(vec, count + 1);        Swap(vec, count, i);    }}int main(int argc, char* argv[]){    for(int i = 0; i < 5; ++ i){        vector<char> vec;        for(int j = 0; j < i; ++j){            vec.push_back('A' + j);        }        cout << "Characters in set: " << endl;        copy(vec.begin(), vec.end(), ostream_iterator<char>(cout, " "));        cout << endl << "Permuations: " << endl;        Permutation(vec, 0);    }return 0;}

Output

Characters in set:Permuations:Empty character setCharacters in set:APermuations:ACharacters in set:A BPermuations:A BB ACharacters in set:A B CPermuations:A B CA C BB A CB C AC B AC A BCharacters in set:A B C DPermuations:A B C DA B D CA C B DA C D BA D C BA D B CB A C DB A D CB C A DB C D AB D C AB D A CC B A DC B D AC A B DC A D BC D A BC D B AD B C AD B A CD C B AD C A BD A C BD A B CPress any key to continue . . .