C++写一个排列组合小程序

时间:2023-03-09 06:29:08
C++写一个排列组合小程序

今天突然想到一个问题,有时候,针对同一个事件有多种反映,特别是游戏AI当中,这种情况下需要采取最适合的方案,哪种方案最适合,可以将每种方案的结果或影响都计算一遍,从而选择最合适的。最基本就是一个排列组合方法,将各种方案都组合出来。于是写了一个基本的N个数排列组合小程序!

开发工具:Visual Studio 2012

CTestPermutation::~CTestPermutation()
{
cout<<">>>>>>>>>>>>>>>>>>>>>>>>CTestPermutation::~CTestPermutation()"<<endl;
} void CTestPermutation::DoTest()
{
cout<<"-------将N个数进行排列组合-------"<<endl<<endl;
vector<int> vecNums,vecPermutated;
cout<<"示例数据:";
for(int i = ; i < ;i++)
{
vecNums.push_back(i);
cout<<i<<" ";
}
cout<<endl;
cout<<"排列组合结果:"<<endl;
Permutation(vecPermutated,vecNums); } /******************************************************
@ FunctionNmae: Permutation
@ Function: 将N个数进行排列组合
@ vecPermutated: 已经排列好的数列
@ vecWaitPermuta: 待排列的数
********************************************************/ void CTestPermutation::Permutation(vector<int> vecPermutated,vector<int> vecWaitPermuta)
{
if(vecWaitPermuta.size() > )
{
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 = ; i < vecPermutated.size();++i)
{
cout<<vecPermutated.at(i)<<" ";
}
cout<<endl;
}
}

执行结果:

C++写一个排列组合小程序