分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow
也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!
/*实现方法:对于一个字符串"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 letter permutation(已输出部分,全部除去已输出部分) end for else 输出 已输出部分*/#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*/
给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/2e19ffb3303a490d20ea5d00dd397156.gif)