c++ 求组合数序列 重写MATLAB P = combs(v,m)


//m < 15, qq:997737609
void combs(std::vector<int>&v, std::vector<std::vector<int>> &P, int m)
{
//1*n
int n = v.size();
if(n == m)
{
P.push_back(v);
}
else if(m == 1)
{
P.resize(v.size());
for(int i =0; i < P.size(); i++)
{
P[i].push_back(v[i]);
}
}
else
{
P.resize(0);
if (m < n && m > 1)
{
for(int k = 0; k < n-m+1; k++)
{
std::vector<std::vector<int>> Q;
std::vector<int> vtemp(n-k-1);
std::copy(v.begin()+k+1, v.begin()+n, vtemp.begin());
combs(vtemp, Q, m-1);
std::vector<std::vector<int>> Qt(Q.size());
for(int i = 0; i < Q.size(); i++)//i rows
{
Qt[i].push_back(v[k]);
Qt[i].insert(Qt[i].end(), Q[i].begin(), Q[i].end());
}
if(P.size() == 0)
{
P = Qt;
}
else
{
P.insert(P.end(),Qt.begin(), Qt.end());
}
}
}
}

}

main()

{

 std::vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    v.push_back(6);
    v.push_back(7);
    v.push_back(8);
     std::vector<std::vector<int >> re;
   combs(v,re, 2);
}


c++ 求组合数序列 重写MATLAB P = combs(v,m)