时限:100ms 内存限制:10000K 总时限:300ms
描述
输入一个小于10的正整数n,按把每个元素都交换到最前面一次的方法,输出前n个小写字母的所有排列。
输入
输入一个小于10的正整数n。
输出
按把每个元素都交换到最前面一次的方法,输出前n个小写字母的所有排列。
输入样例
3
输出样例
abc
acb
bac
bca
cba
cab
#include <iostream>
#include <stdio.h>
using namespace std;
int n;
char a[10] = {'a','b','c','d','e','f','g','h','i','j'};
void swap(int x,int y)
{
int tmp;
tmp = a[x];
a[x] = a[y];
a[y] = tmp;
}
void search(int k)
{
int i;
if(k == n)
{
for(i = 0;i < n;i++)
{
cout << a[i];
}
cout << endl;
}
else
{
for(i = k;i < n;i++)
{
swap(i,k);
search(k+1);
swap(i,k);
}
}
}
int main()
{
cin >> n;
search(0);
return 0;
}
也是非常典型的回溯算法