程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++寫一個排列組合小程序,排列組合小程序

C++寫一個排列組合小程序,排列組合小程序

編輯:C++入門知識

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 = 1; i < 5;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() > 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;
    }
}

執行結果:

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved