标签:
全排列问题
输入一个字符串S(S的长度 <= 9,且只包括0 - 9的阿拉伯数字)
输出S所包含的字符组成的所有排列
1312
1123 1132 1213 1231 1312 1321 2113 2131 2311 3112 3121 3211
①用STL//教程在紫书187页
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; char QAQ[15]; int n; int main() { scanf("%s",QAQ); n=strlen(QAQ); sort(QAQ,QAQ+n); do { puts(QAQ); } while (next_permutation(QAQ,QAQ+n)); return 0; }
②用递归代替重,递归里放一个循环
#include <iostream> #include <string> #include <algorithm> #include <vector> #include <map> using namespace std; typedef string::const_iterator sit; bool vis[9]; map<string,bool> m; void dfs(const string& s,sit pos,string& st) { if (st.size()==s.length()&&m.find(st)==m.end()) { m[st]=true; cout<<st<<endl; return; } for (sit i=s.begin(); i!=s.end(); ++i) if (vis[i-s.begin()]==false) { vis[i-s.begin()]=true; st.push_back(*i); dfs(s,i+1,st); st.erase(st.end()-1,st.end()); vis[i-s.begin()]=false; } } int main() { string s; cin>>s; sort(s.begin(),s.end()); string temp; dfs(s,s.begin(),temp); return 0; }
标签:
原文地址:http://www.cnblogs.com/gc812/p/5916065.html