qt-n个数组实现排列组合

Posted 程序员成长日志

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了qt-n个数组实现排列组合相关的知识,希望对你有一定的参考价值。


例如:现在有一批鞋子,其中颜色有[‘白色’,‘黑色’,‘灰色’];大小有[‘40’,‘41’,‘42’],样式有[‘板鞋’,‘运动’,‘休闲’],要求写一个算法,实现[[‘白色’,‘40’,‘板鞋’], [‘白色’,‘42’,‘休闲’] …]这样的组合

代码如下

QList<QVector<QPointF>> xx::getAllGroup(QList<QVector<QPointF>> val){
  int oriSize = val.size();

  QVector<int> tempIndexArr(oriSize);
  tempIndexArr[oriSize - 1] = -1;
  QVector<int> tempLengthArr(oriSize);
  for (int i = 0; i < oriSize; i++){
    tempLengthArr[i] = val[i].size();
  }

  QList<QVector<QPointF>> newList;
  bool completeFlag = false;
  while (!completeFlag){
    int changeIndex = val.size() - 1;
    bool isRightIndex = false;
    while (!isRightIndex){
      tempIndexArr[changeIndex] += 1;
      if (tempIndexArr[changeIndex] >= tempLengthArr[changeIndex]){
        if (changeIndex == 0){
          isRightIndex = true;
          completeFlag = true;
        }
        else{
          tempIndexArr[changeIndex--] = 0;
        }
      }
      else{
        isRightIndex = true;
      }
    }
    if (isRightIndex && !completeFlag){
      QVector<QPointF> pointVec;
      for (int i = 0; i != val.size(); i++){
        pointVec.push_back(val[i][tempIndexArr[i]]);
      }
      newList.push_back(pointVec);
    }
  }
  return newList;
}

  已经工作的程序员朋友可以关注下我的gzh“程序员成长日志”,分享日常工作中解决的问题即可赚取稿费,大家一起成长~

以上是关于qt-n个数组实现排列组合的主要内容,如果未能解决你的问题,请参考以下文章

TODO:排列组合问题:n个数中取m个

123能组成多少组数排列出来是啥

HDU 1521 排列组合

错位+组合排列计数

next_permutation函数(全排列)

1234这4个数字一共有多少种排列方式,分别写出来