使用递归实现n重循环

 
       这里的n是不确定的。
       实现的功能描述如下:
1.        有一个字符串的矩阵,用vector< vector< CStirng > > 表示
2.        行与行之间进行排列组合
3.        输出所有组合的方式
 
int loop( VEC_DYADIC_STRING vecDyadic,    // 字符串矩阵
          int& nMax,                     // 记录未遍历的行号
          int& nCurDeep,                 // 当前行数(也可以称为深度)
          VEC_INT& vecInt,               // 记录所有行号
          VEC_INT& vecInt2 )             // 记录每一行选中的
{
     vecInt.push_back( nCurDeep );
     for ( UINT i = 0; i < vecDyadic[nCurDeep].size(); i++ )
     {
         if ( nMax > 1 )    // 如果不是最后一行
         {
              nMax--;
              nCurDeep++;
              vecInt2.push_back( i );
              loop( vecDyadic, nMax, nCurDeep, vecInt, vecInt2 );
         }
         else
         {
              //char* pData;
              //USES_CONVERSION;
              //pData = T2A( vecDyadic[nCurDeep][i] );
              for ( UINT j = 0; j < vecInt2.size(); j++ )
              {
                   cout<<vecDyadic[vecInt[j]][vecInt2[j]]<<_T( " " );
              }
              cout<<vecDyadic[nCurDeep][i]<<endl;
              nOutNum++;                           // 全局变量,记录循环的次数,也就是排列组合的次数。
         }
     }
     deleteVecBehindSepVal( vecInt, nCurDeep );     // 最后一层for循环执行完毕,需要回到上一层,上一层的循环数加1,这需要修改Vector中保存的记录,所以需要将该层(包括该层)之后的记录删除。
     nMax++;
     nCurDeep--;
     deleteVecBehindSepVal( vecInt2, nCurDeep );    // 同理
 
     return 0;
}
 
deleteVecBehindSepVal 是自定义的函数,Function is 删除Vector中指定位置之后的元素。
 
经测试,对于字符串矩阵
Apple    Orange   banana
car      bus      taxi      bicycle
basketball    football      badminton     tennis   volleyball
共输出60条记录。
源代码参考: 我的资源 递归实现n重循环
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值