• 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<<"	";
            for(int i = 0; i < vecPermutated.size();++i)
            {
                cout<<vecPermutated.at(i)<<" ";
            }
            cout<<endl;
        }
    }

    执行结果:

  • 相关阅读:
    iOS开发日记1-tableview编辑
    nginx安装-del
    linux服务器su之后变成bash-4.1#
    PhoneGap & HTML5 学习资料网址
    PhoneGap通信机制的实现原理
    Android调用Java WebSevice篇之二
    Android调用Java WebSevice篇之一
    Java开发牛人十大必备网站
    百度地图生产工具
    PS制作圆角透明图片
  • 原文地址:https://www.cnblogs.com/knight-monkey/p/Monkey_blog_201507031706.html
Copyright © 2020-2023  润新知