简单的全排列(憨憨用ascii码标记的时候才只开100大小的标记数组)
憨憨出现在注释中。
全排列的套路:
- 用一个盒子(标记数组)来标记哪个数字被访问过。
- 将当前数字存到ans里,并标记。
- 当符合全排列的时候输出。
- 将当前数字退出盒子(回溯)。
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<cstring>
using namespace std;
char str[30],ans[30];
bool vis[100];
//void dfs(int step){
// for(int i=0;i<strlen(str);i++){
// if(vis[str[i]]==false){
// ans[step]=str[i];
// vis[str[i]]=true;
// if(step==strlen(str)-1){
// cout<<ans<<endl;
// vis[str[i]]=false;
// return;
// }
// dfs(step+1);
// vis[str[i]]=false;
// }
// }
// return;
//}
void dfs(int step){
if(step==strlen(str)){
ans[strlen(str)]='\0';
cout<<ans<<endl;
return;
}
for(int i=0;i<strlen(str);i++){
if(vis[i]==false){
ans[step]=str[i];
vis[i]=true;
dfs(step+1);
vis[i]=false;
}
}
return;
}
int main(){
cin>>str;
dfs(0);
return 0;
}