n个数排列:
例如:1 2 3 4 有多少种排列方法?分别是什么?
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <memory.h>
#include <vector>
using namespace std;
void Permutation(vector<int> vecPermutated,vector<int> vecWaitPermuta)
{
if(vecWaitPermuta.size() > 0 )
{
for(vector<int>::iterator itNum = vecWaitPermuta.begin();itNum != vecWaitPermuta.end();++itNum)
{
vector<int> vecPermutatedTmp = vecPermutated;
vecPermutatedTmp.push_back(*itNum);
vector<int> vecWaitPermutaTmp = vecWaitPermuta;
//删除当前已经加入排列完毕的元素
vector<int>::iterator retFind = find(vecWaitPermutaTmp.begin(),vecWaitPermutaTmp.end(),*itNum);
if(vecWaitPermutaTmp.end() != retFind)
{
vecWaitPermutaTmp.erase(retFind);
}
//继续递归调用排列算法
Permutation(vecPermutatedTmp,vecWaitPermutaTmp);
}
}
else //一组排列完毕
{
//打印排列结果
cout<<"\t";
for(int i = 0; i < vecPermutated.size();++i)
{
cout<<vecPermutated.at(i)<<" ";
}
cout<<endl;
}
}
int main()
{
vector<int> vecNums,vecPermutated;
for(int i = 1; i < 5;i++)
{
vecNums.push_back(i);
cout<<i<<" ";
}
cout<<endl;
Permutation(vecPermutated,vecNums);
}