算法 - 输出一个字符串的全排列(C++)

来源:互联网 发布:php可以开发什么 编辑:程序博客网 时间:2024/05/16 17:30

/*实现方法:对于一个字符串"abc"输出它的全排列,第一个字符应该分别为a,b,c;第二个字符,后面应该是除去已输出部分的剩余部分的全排列。即对于"abc",输出 a,输出"abc"除去'a'的全排列;    输出 b,输出"bc"除去'b'的全排列;    输出 c,输出"bc"除去'c'的全排列;输出 b,输出"abc"除去'b'的全排列;输出 c,输出"abc"除去'c'的全排列;所以一个递归的实现方法是:void permutation(已输出部分,全部除去已输出部分)if 全部除去已输出部分!=空for letter in 全部除去已输出部分已输出部分:append letter全部除去已输出部分:remove letterpermutation(已输出部分,全部除去已输出部分)end forelse 输出 已输出部分*/#include <iostream>#include <list>#include <iterator>using namespace std;void permutation(list<char> pre, list<char> str){if (!str.empty()){for (list<char>::iterator it = str.begin(); it != str.end(); ++it){list<char> curPre(pre);list<char> templist(str.begin(), str.end());curPre.push_back(*it);templist.remove(*it);permutation(curPre, templist);}}else{copy(pre.begin(), pre.end(), ostream_iterator<char>(cout, ""));cout << endl;}}int main(){char* alphabet = "ABCDE";list<char> str(alphabet, &alphabet[5]);permutation(list<char>(), str);return 0;}// Output:/*ABCDEABCEDABDCEABDECABECDABEDCACBDEACBEDACDBEACDEBACEBDACEDBADBCEADBECADCBEADCEBADEBCADECBAEBCDAEBDCAECBDAECDBAEDBCAEDCBBACDEBACEDBADCEBADECBAECDBAEDCBCADEBCAEDBCDAEBCDEABCEADBCEDABDACEBDAECBDCAEBDCEABDEACBDECABEACDBEADCBECADBECDABEDACBEDCACABDECABEDCADBECADEBCAEBDCAEDBCBADECBAEDCBDAECBDEACBEADCBEDACDABECDAEBCDBAECDBEACDEABCDEBACEABDCEADBCEBADCEBDACEDABCEDBADABCEDABECDACBEDACEBDAEBCDAECBDBACEDBAECDBCAEDBCEADBEACDBECADCABEDCAEBDCBAEDCBEADCEABDCEBADEABCDEACBDEBACDEBCADECABDECBAEABCDEABDCEACBDEACDBEADBCEADCBEBACDEBADCEBCADEBCDAEBDACEBDCAECABDECADBECBADECBDAECDABECDBAEDABCEDACBEDBACEDBCAEDCABEDCBA*/

原创粉丝点击