算法1
(用algorithm库里的排序next_permutation())
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 7;
string a;
int main()
{
char str[N];
cin >> a;
for (int i = 0; i < a.size(); i ++ ) str[i] = a[i];
do{//先do的为了得到初试的结果
for (int i = 0; i < a.size(); i ++ ) cout << str[i];
cout << endl;
} while (next_permutation(str, str + a.size()));
return 0;
}
算法2
(DFS)
每次遍历所有可能,记录每次加入进去的状态
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 7;
string a;
bool st[N];
string res;
void dfs(string a, int cnt)
{
if(cnt == a.size()){ cout << res << endl;return;}
for(int i = 0; i < a.size(); i ++ )
{
if(!st[i]){//不在深搜栈内才能进入
st[i] = true;//进入深搜栈
res += a[i];//拼接字符串
dfs(a,cnt + 1 );//递归
st[i] = false;//回溯
res.pop_back();
}
}
}
int main()
{
cin >> a;
dfs(a,0);
return 0;
}
作者:NgAgo
链接:https://www.acwing.com/solution/content/55606/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。