zoukankan      html  css  js  c++  java
  • 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;
        }
    }

    执行结果:

  • 相关阅读:
    vue自定义指令,自动调用下载的方法
    electron桌面通知,修改默认通知应用名electron.app.Electron为自己应用的名称
    C++二叉树前中后序遍历(递归&非递归)统一代码格式
    反转链表和反转链表2
    基于partition的递归
    C++归并排序(数组&链表)
    关于C++跨平台
    Visual Studio 2019社区版:错误 MSB6006 “CL.exe”已退出,代码为 2
    腾讯2017校招开发工程师笔试试卷(一)答题解析
    C++面试高频题
  • 原文地址:https://www.cnblogs.com/knight-monkey/p/Monkey_blog_201507031706.html
Copyright © 2011-2022 走看看