这题是全排列:还得自己思考才行 这个回溯就是回溯的时候把原来满足条件去掉的在改回来
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
using namespace std;
char s[10],t[10];
bool vis[10];
int n;
void dfs(int step)
{
if(step==n)
{
t[step]='\0';
cout<<t<<endl;
}
else
{
for(int i=0;i<n;i++)
{
if(vis[i]==0)
{
vis[i]=1;
t[step]=s[i];
dfs(step+1);
vis[i]=0;
}
}
}
}
int main()
{
memset(vis,0,sizeof(vis));
scanf("%s",s);
n=strlen(s);
dfs(0);
return 0;
}
还有一种非常简单的方法但是这题不让用
#include<bits/stdc++.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
string s;
cin>>s;
do
{
cout<<s<<endl;
}while(next_permutation(s.begin(),s.end()));
return 0;
}