这个问题,或许对于别人来说很简单,但对于我来说还是挺难的,花了我两天时间,虽然我不是一直在做这个问题。 废话不多说,上代码,自己基本功还有待加强啊。
#include "stdafx.h"
#include <vector>
#include <iostream>
using std::vector;
using std::cout;
using std::cin;
using std::endl;
void AllSort(vector<char> vec1, vector<char> vec2, int j, int n)
{
if(j == n -1)
{
vec2.push_back(vec1[j]);
for(int d = 0; d<vec2.size(); d++)
{
cout<<vec2[d];
}
cout<<endl;
vec2.clear();
}
else
{
for(int i = j; i < n; i++)//i用于每个位置有多少种排列方式
{
char temp;
vec2.push_back(vec1[i]);
//交换位置
temp = vec1[i];
vec1[i] = vec1[j];
vec1[j] = temp;
AllSort(vec1, vec2, ++j, n);
//交换位置,恢复原来的样子
temp = vec1[i];
vec1[i] = vec1[j-1];
vec1[j-1] = temp;
j = j -1;
vec2.pop_back();
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char *a = "abca";
vector<char> vec1(a, a+4);
vector<char> vec2; //存放每种排列方便被打印出来
AllSort(vec1, vec2, 0, 4);
return 0;
}