1324.穷举所有排列
时限:100ms 内存限制:10000K 总时限:300ms
描述
输入一个小于10的正整数n,按把每个元素都交换到最前面一次的方法,输出前n个小写字母的所有排列。
输入
输入一个小于10的正整数n。
输出
按把每个元素都交换到最前面一次的方法,输出前n个小写字母的所有排列。
输入样例
3
输出样例
abc
acb
bac
bca
cba
cab
提示
来源
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXN 11000
using namespace std;
char xxx[MAXN];
int vis[MAXN];
int n;
void solve(int cnt)
{
int i;
if(cnt==n+1)
{
for(i=1;i<=n;i++)
cout<<xxx[i];
cout<<endl;
return;
}
for(i=cnt;i<=n;i++)
{
char t=xxx[cnt];
xxx[cnt]=xxx[i];
xxx[i]=t; //第一遍自己和自己交换
solve(cnt+1);
t=xxx[cnt];
xxx[cnt]=xxx[i];
xxx[i]=t;
}
}
int main()
{
cin>>n;
int i;
memset(vis,0,sizeof(vis));
for(i=1;i<=n;i++)
xxx[i]='a'+i-1;
solve(1);
return 0;
}